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"}],但它仍然会抛出相同的错误。

有什么想法吗?

c解析json:读取json对象时出错

就个人而言,最干净的方法是为您期望接受的对象签名定义一个类:

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"}

应该使用您现有的代码。