c解析json:读取json对象时出错
本文关键字:json 出错 对象 解析 读取 | 更新日期: 2023-09-27 18:21:20
我在c#中获取json值时遇到了一些问题。
https://i.stack.imgur.com/Uxn8e.png
这是有问题的代码:
var json2 = new WebClient().DownloadString("http://fetch.json.url.here" + Input_Textbox.Text);
JObject o2 = JObject.Parse(json2);
string he_ident = (string)o2["he_ident"];
string le_ident = (string)o2["le_ident"];
Console.WriteLine(he_ident);
Console.WriteLine(le_ident);
第204行为:JObject o2 = JObject.Parse(json2);
json是这样的:[{"le_ident":"06L","he_ident":"24R"},{"le_ident":"06R","he_ident":"24L"},{"le_ident":"07L","he_ident":"25R"},{"le_ident":"07R","he_ident":"25L"}]
我也只尝试过一组le_ident和he_ident,比如[{"le_ident":"06L","he_ident":"24R"}]
,但它仍然会抛出相同的错误。
有什么想法吗?
就个人而言,最干净的方法是为您期望接受的对象签名定义一个类:
class Entity {
public he_ident { get;set; }
public le_ident { get;set; }
}
然后只需将DeserializeObject()
调用到集合中即可:
var entities = JsonConvert.DeserializeObject<List<Entity>>(json2);
你应该能够像任何C#对象一样访问它:
foreach(var entity in entities) {
Console.WriteLine(entity.he_ident);
Console.WriteLine(entity.le_ident);
}
如果您的JSON签名是动态的,那么这将不起作用(或者会有点乏味,因为您必须为每个签名定义类)。
但就我个人而言,我发现这种方法消除了像ArrayList
这样的东西所带来的麻烦,并在代码中引入了严格的类型,我发现这通常有助于在C#环境中实现更强、更干净的结构。
json数组应该使用JArray而不是JObject:
var json = new WebClient().DownloadString(...);
JArray array = JArray.Parse(json);
string he_ident = (string)array[0]["he_ident"];
string le_ident = (string)array[0]["le_ident"];
JSON是一个列表而不是字典。
所以你需要做的是:
string he_ident = (string)(((ArrayList)o2)[0])["he_ident"];
(或者简单地循环浏览列表)
JSON数据:
{"le_ident":"06L"}
应该使用您现有的代码。