c#解析无效json [已关闭]

wgmfuz8q  于 2023-02-14  发布在  C#
关注(0)|答案(2)|浏览(193)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

2天前关闭。
Improve this question
我有一些“json”被一个外部API(我无法控制)返回,它似乎返回了无效的json(我还没有弄清楚如何将其解析为c#对象)。如果我使用一个var,只是反序列化,没有错误,但我不知道如何将数据取出...
下面是json的一个片段:

{"data":"0":"BCDF0124","1":"BCDF0128","2":"BCDF0134","3":"BCDF0137","4":"BCDF02"},"statusCode":"OK","error":null}

当我执行类似var objData = JsonConvert.DeserializeObject(strTheJson)的操作时,没有运行时错误,但是我无法访问json的“数据”部分中的list/array/whatever-it-is。

rryofs0p

rryofs0p1#

您的JSON无效。需要在数据属性后添加“{”。要修复此问题

strTheJson = strTheJson.Replace("data\":", "data\":{");

如果只需要数据部分
作为字典

Dictionary<string, string> data = JObject.Parse(json)["data"]
                                        .ToObject<Dictionary<string, string>>();

作为列表

List<string> dataList = ((JObject)JObject.Parse(json)["data"]).Properties()
                                          .Select(p => (string)p.Value).ToList();

输出

["BCDF0124","BCDF0128","BCDF0134","BCDF0137","BCDF02"]
wlzqhblo

wlzqhblo2#

如果你没有得到任何错误,那么你发布的代码片段是不正确的,因为这肯定会导致异常。
JsonConvert是Newtonsoft.Json的一部分。JsonConvert.Deserialize对于反序列化为您在C#中定义的对象类型非常有用,但在不使用泛型版本时效果不佳。可能很难准确预测它将返回什么。但在本例中,它应该是一个类似字典的对象。
选项A定义一个与JSON中的数据匹配的类,并用途:JsonConvert.Deserialize<MySpecialClass>(json)
选项B使用JToken类,如JObject等:

JObject = JObject.parse(json).SelectToken("data") as JObject;

然后,您可以将该对象转换为Dictionary、List或Array等。

相关问题