好了,我有了下面的json响应,它包含了一个细节数组。
{
"top":{
"middle":[
{
"name": "name1".
"values":[
{
"value": 123
}
]
},
{
"name": "name2".
"values":[
{
"value": 456
}
]
}
]
}
}
我可以使用以下方法获取数据:
JObject data = JObject.Parse(JSONDATA);
var Name1 = (string)data["top"]["middle"][0]["name"];
var Value1 = (float)data["top"]["middle"][0]["values"][0]["value"];
但是,数组中的项目出现的顺序是随机的,所以我不能使用[0]和[1]来指定第一个或第二个项目。
我知道我仍然可以使用这个方法,然后计算出name1或name2是否匹配,这意味着我将知道每个名称对应的值。但它似乎非常冗长,我知道一定有一个更简单的方法。
我已经尝试了一些事情,比如
JToken mydata = data.SelectToken("$.top.middle[?(@.name == 'name1')]");
我试着根据name值得到数组的索引。
但是我就是做不好。任何帮助都将不胜感激。
2条答案
按热度按时间h79rfbju1#
我宁愿用Linq
5lwkijsr2#
要获取与特定名称对应的值,可以循环遍历数组并检查每个对象的name属性,直到找到要查找的对象。
这个实现使用一个循环来遍历中间数组中的每个对象,并检查name属性是否与我们要查找的匹配。如果匹配,它将检索value属性并退出循环。如果没有找到匹配的对象,它将输出一条消息,指示没有找到对象。
请注意,此实现假定中间数组中只有一个具有指定名称的对象。如果可能有多个具有相同名称的对象,则可能需要修改实现以处理这种情况。