C# - JObject.Parse - 无效 JSON
C# - JObject.Parse - Invalid JSON
我正在使用返回 JSON 的 API。
我有一个调用 api 的方法,并为所需节点解析 JSON 响应。
到目前为止一切正常,除了最新的 JSON 响应似乎格式不正确。
其他回复如:
{
"Keyword":"\"marhope\"",
"TermKey":null,
"Customers":[
{
"Memberships":[ ],
"CompanyId":0,
"ObjectId":112974,
"ObjectType":"Customer",
}
]
}
我使用 JObject.Parse 按名称取回适当的节点。
最新的 JSON 回复为:
{
[
{
"AnimalId":9079117,
"SpeciesCode":"XX",
}
]
}
如你所见,没有"name",JSON略显无效
我该如何解析这个。对于第一个示例,我使用了下面的代码,但是现在 JSON 没有 "name",我不知道如何处理这个,想法?
JObject results = JObject.Parse(csr.SearchCustomer(1, 1, 870, term));
foreach (var resp in results["Customers"])
{
string obj = (string)resp["CompanyId"];
}
Jon Skeet 是正确的,第二个 JSON 无效:不能在没有 属性 名称的对象中直接使用数组。最好的做法是让 API 开发人员修复 JSON。但是,如果您只是在寻找一种快速而肮脏的解决方法,您可以从无效的 JSON 中删除第一个和最后一个大括号,然后使用 JArray.Parse
.[=12 将其解析为数组=]
string json = @"{
[
{
""AnimalId"":9079117,
""SpeciesCode"":""XX"",
}
]
}";
json = json.Substring(1, json.Length - 2);
JArray array = JArray.Parse(json);
foreach (JObject item in array.Children<JObject>())
{
Console.WriteLine("AnimalId: " + item["AnimalId"]);
Console.WriteLine("SpeciesCode: " + item["SpeciesCode"]);
}
我正在使用返回 JSON 的 API。
我有一个调用 api 的方法,并为所需节点解析 JSON 响应。
到目前为止一切正常,除了最新的 JSON 响应似乎格式不正确。
其他回复如:
{
"Keyword":"\"marhope\"",
"TermKey":null,
"Customers":[
{
"Memberships":[ ],
"CompanyId":0,
"ObjectId":112974,
"ObjectType":"Customer",
}
]
}
我使用 JObject.Parse 按名称取回适当的节点。
最新的 JSON 回复为:
{
[
{
"AnimalId":9079117,
"SpeciesCode":"XX",
}
]
}
如你所见,没有"name",JSON略显无效
我该如何解析这个。对于第一个示例,我使用了下面的代码,但是现在 JSON 没有 "name",我不知道如何处理这个,想法?
JObject results = JObject.Parse(csr.SearchCustomer(1, 1, 870, term));
foreach (var resp in results["Customers"])
{
string obj = (string)resp["CompanyId"];
}
Jon Skeet 是正确的,第二个 JSON 无效:不能在没有 属性 名称的对象中直接使用数组。最好的做法是让 API 开发人员修复 JSON。但是,如果您只是在寻找一种快速而肮脏的解决方法,您可以从无效的 JSON 中删除第一个和最后一个大括号,然后使用 JArray.Parse
.[=12 将其解析为数组=]
string json = @"{
[
{
""AnimalId"":9079117,
""SpeciesCode"":""XX"",
}
]
}";
json = json.Substring(1, json.Length - 2);
JArray array = JArray.Parse(json);
foreach (JObject item in array.Children<JObject>())
{
Console.WriteLine("AnimalId: " + item["AnimalId"]);
Console.WriteLine("SpeciesCode: " + item["SpeciesCode"]);
}