【发布时间】:2019-05-01 20:50:51
【问题描述】:
我向 API 发出请求,我能够解析 success 响应结果 (response.Content.ReadAsStringAsync().Result),但是当我得到 failure 响应时(“bad request"),看似格式正确的 JSON 结果无法被 JObject.Parse() 或 JToken.Parse() 解析,他们抛出。
using System;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
var result = "\"{\\\"error\\\":{\\\"detail\\\":\\\"java.lang.NullPointerException\\\",\\\"message\\\":\\\"Error occured while setting field 'caller_id' with value null\\\"},\\\"status\\\":\\\"failure\\\"}\"";
var jObject = JObject.Parse(result);
Console.WriteLine(jObject["error"]["message"]);
}
}
例外:
运行时异常(第 10 行):从 JsonReader 读取 JObject 时出错。 当前 JsonReader 项不是对象:字符串。路径'',第 1 行, 位置 162。
堆栈跟踪:
[Newtonsoft.Json.JsonReaderException: 读取 JObject 时出错 json阅读器。当前 JsonReader 项不是对象:字符串。小路 '', 第 1 行,位置 162。] 在 Newtonsoft.Json.Linq.JObject.Load(JsonReader 阅读器,JsonLoadSettings 设置)在 Newtonsoft.Json.Linq.JObject.Parse(字符串 json, JsonLoadSettings 设置)在 Program.Main() 处的 Newtonsoft.Json.Linq.JObject.Parse(String json) :第 10 行
异常指向字符串的最后,但我不知道缺少什么。 https://jsonblob.com 可以在我删除反斜杠后解析它,我去掉了撇号,我用字符串和正则表达式替换“清理它”,我变成了一个 char 数组并再次构建它,一切都无济于事。
帮助表示赞赏!
【问题讨论】:
-
为什么你的字符串中有这么多斜线?我用这个字符串
var result = "{\"error\":{\"detail\":\"java.lang.NullPointerException\",\"message\":\"Error occured while setting field 'caller_id' with value null\"},\"status\":\"failure\"}";成功运行了你的代码。 -
这就是从请求中返回的内容,我猜 C# 逃逸得更多。