[英]JObject Parse not able to parse String with JSON type
在此方法中,将从GetDataSetColumns()返回一个JSON字符串,该字符串从标牌系统(Xibo)调用API以获取数据集。 我想将其解析为JSON对象。
我搜索了很多遍,发现有些人也遇到了同样的问题。 但是似乎他们的解决方案对我不起作用。 例如解析为JArray或String.Trim()
public async Task<String> GetColumnIdByName(int dataSetId, String heading)
{
String columns = await GetDataSetColumns(dataSetId);
columns.Replace("[", "");
columns.Replace("]", "");
columns.TrimStart().TrimEnd();
**JObject json = JObject.Parse(columns);**
Debug.WriteLine(json);
foreach (KeyValuePair<string, JToken> pair in json)
{
if (pair.Key.ToString().Equals("dataSetColumnId"))
{
if(pair.Value.ToString().Equals(heading))
{
return pair.Value.ToString();
}
}
}
return null;
}
这是从GETDataSetColumns方法返回并在Debug中显示的JSON。 而且我看不到此JSON字符串有任何错误。
[
{
"dataSetColumnId": 8,
"dataSetId": 3,
"heading": "item_name",
"dataTypeId": 1,
"dataSetColumnTypeId": 1,
"listContent": null,
"columnOrder": "1",
"formula": null,
"dataType": "String",
"dataSetColumnType": "Value"
},
{
"dataSetColumnId": 9,
"dataSetId": 3,
"heading": "price",
"dataTypeId": 1,
"dataSetColumnTypeId": 1,
"listContent": null,
"columnOrder": "2",
"formula": null,
"dataType": "String",
"dataSetColumnType": "Value"
},
{
"dataSetColumnId": 12,
"dataSetId": 3,
"heading": "category",
"dataTypeId": 1,
"dataSetColumnTypeId": 1,
"listContent": null,
"columnOrder": "3",
"formula": null,
"dataType": "String",
"dataSetColumnType": "Value"
},
{
"dataSetColumnId": 15,
"dataSetId": 3,
"heading": "status",
"dataTypeId": 1,
"dataSetColumnTypeId": 1,
"listContent": null,
"columnOrder": "7",
"formula": null,
"dataType": "String",
"dataSetColumnType": "Value"
}
]
而且我还通过“调试”模式检查了变量的值,具有“ \\ n”和许多空格是否正常? 此外,String.Replace和String.TrimStart()无法正常工作。
JObject.Parse之后发生异常错误。
Exception thrown: 'Newtonsoft.Json.JsonReaderException' in Newtonsoft.Json.dll
Exception thrown: 'Newtonsoft.Json.JsonReaderException' in mscorlib.dll
An exception of type 'Newtonsoft.Json.JsonReaderException' occurred in mscorlib.dll but was not handled in user code
Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path '', line 1, position 1.
我的JSON字符串或解析方式有问题吗? 谢谢你的帮助!
我从这篇文章中找到了答案
我还在网上找到了其他答案,但所有答案均无效。 他们中的一些人建议定义一个类,然后将对象反序列化为该定义的类。 但是我认为这不是正确的方法,因为JSON的结构可能是动态的。
我将其传输到JArray并从中检索对象作为JObject。 而且有效。 我看到了这些注释,并且我认为JSON的有效性根本不是我的问题的重点。
String columns = await GetDataSetColumns(dataSetId);
JArray jArr = (JArray)JsonConvert.DeserializeObject(columns);
foreach (JObject item in jArr)
{
if(heading.Equals(item["heading"].ToString()))
{
return item["dataSetId"].ToString();
}
}
这是JSON字符串的示例,我通过键获取值
{
"dataSetColumnId": 12,
"dataSetId": 3,
"heading": "category",
"dataTypeId": 1,
"dataSetColumnTypeId": 1,
"listContent": null,
"columnOrder": "3",
"formula": null,
"dataType": "String",
"dataSetColumnType": "Value"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.