C# 无法分析格式正确的JSON

C# 无法分析格式正确的JSON,c#,json.net,C#,Json.net,我向API发出请求,并且我能够解析成功响应结果(response.Content.ReadAsStringAsync().result),但是当我得到失败响应(“错误请求”)时,JObject.parse()或JToken.parse()无法解析看似格式良好的JSON结果,他们扔 using System; using Newtonsoft.Json.Linq; public class Program { public static void Main() {

我向API发出请求,并且我能够解析成功响应结果
(response.Content.ReadAsStringAsync().result)
,但是当我得到失败响应(“错误请求”)时,
JObject.parse()
JToken.parse()
无法解析看似格式良好的JSON结果,他们扔

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:从中读取作业对象时出错 JsonReader。当前JsonReader项不是对象:String.Path“”, 第1行,位置162.]位于 Newtonsoft.Json.Linq.JObject.Load(JsonReader阅读器,JsonLoadSettings 设置)在Newtonsoft.Json.Linq.JObject.Parse(字符串Json, JsonLoadSettings(设置)位于 Program.Main()处的Newtonsoft.Json.Linq.JObject.Parse(字符串Json) :第10行

异常指向字符串的最末端,但我无法找出缺少的内容。在我删除反斜杠之后,我可以解析它,我去掉了撇号,我用string和regex replace“清理”了它,我变成了一个char数组并再次构建它,所有这些都没有用


谢谢你的帮助

当我编写json字符串时:

var result = "\"{\\\"error\\\":{\\\"detail\\\":\\\"java.lang.NullPointerException\\\",\\\"message\\\":\\\"Error occured while setting field 'caller_id' with value null\\\"},\\\"status\\\":\\\"failure\\\"}\"";
它返回:

"{\"error\":{\"detail\":\"java.lang.NullPointerException\",\"message\":\"Error occured while setting field 'caller_id' with value null\"},\"status\":\"failure\"}"
这不是正确的json字符串。您的json字符串必须如下所示:

var result = "{\"error\":{\"detail\":\"java.lang.NullPointerException\",\"message\":\"Error occured while setting field 'caller_id' with value null\"},\"status\":\"failure\"}"
因此,当您编写此语句时,您将看到它生成以下字符串,这是一个格式正确的json:

{"error":{"detail":"java.lang.NullPointerException","message":"Error occured while setting field 'caller_id' with value null"},"status":"failure"}

当我编写json字符串时,它是:

var result = "\"{\\\"error\\\":{\\\"detail\\\":\\\"java.lang.NullPointerException\\\",\\\"message\\\":\\\"Error occured while setting field 'caller_id' with value null\\\"},\\\"status\\\":\\\"failure\\\"}\"";
它返回:

"{\"error\":{\"detail\":\"java.lang.NullPointerException\",\"message\":\"Error occured while setting field 'caller_id' with value null\"},\"status\":\"failure\"}"
这不是正确的json字符串。您的json字符串必须如下所示:

var result = "{\"error\":{\"detail\":\"java.lang.NullPointerException\",\"message\":\"Error occured while setting field 'caller_id' with value null\"},\"status\":\"failure\"}"
因此,当您编写此语句时,您将看到它生成以下字符串,这是一个格式正确的json:

{"error":{"detail":"java.lang.NullPointerException","message":"Error occured while setting field 'caller_id' with value null"},"status":"failure"}

您提供的字符串是格式良好的JSON。如果您将一些数据序列化为JSON字符串,然后将该字符串序列化为JSON字符串,您将得到这个结果。因此,要从原始JSON字符串中提取数据,必须对其进行两次解析

以下是我的作品:

        var jToken = JToken.Parse(result);
        var jObject = JObject.Parse((string)((JValue)jToken).Value);

        Console.WriteLine(jObject["error"]["message"]);

您提供的字符串是格式良好的JSON。如果您将一些数据序列化为JSON字符串,然后将该字符串序列化为JSON字符串,您将得到这个结果。因此,要从原始JSON字符串中提取数据,必须对其进行两次解析

以下是我的作品:

        var jToken = JToken.Parse(result);
        var jObject = JObject.Parse((string)((JValue)jToken).Value);

        Console.WriteLine(jObject["error"]["message"]);

为什么你的绳子上有这么多斜线?我使用以下字符串运行代码:“\”var result=“{\”error\:{\“detail\:\”java.lang.NullPointerException\”、\“message\”:\“设置值为null\”}、\“status\”的字段“caller\u id”时出错:\“failure\”}成功。这就是请求返回的结果,我猜C#转义会更多。为什么字符串中有这么多斜杠?我使用以下字符串运行代码:“{\'error\”:{\'detail\”:\“java.lang.NullPointerException\”,\“message\”:\“设置值为null的字段'caller\u id',“status\”:“failure\”}时出错”成功。这就是请求返回的结果,我猜C#逃脱多一点。我不会在一百万年内猜到的,谢谢!我在一百万年内都不会猜到的,谢谢!