我从json文件中加载了一些下面的JSON对象。
{
"Context": [
{
"name": "Cities",
"cities": [ "hyd", "bang", "chennai" ],
"location": [
{
"city": [ "hyd" ],
"address": "xxx"
},
{
"city": [ "hyd", "bang" ],
"address": "xxx"
},
]
}
]
}
我想从
获取令牌“ city”的值 "location": [
{
"city": [ "hyd" ],
"address": "xxx"
},
{
"city": [ "hyd", "bang" ],
"address": "xxx"
}
]
使用下面的代码,我可以获得令牌“名称”的值。
StreamReader rs = new StreamReader("Jsonfilepath\.json");
string json = rs.ReadToEnd();
var jsonObject = JObject.Parse(json).Children();
List<JToken> tokens = jsonObject.Children().Children().ToList();
var value = tokens.Any(each =>each["name"].ToString().ToLower().Contains("cities"));
问题:如何获取令牌“城市”值?
答案 0 :(得分:2)
您可以查询json以获取所需的结果
JToken jToken = JToken.Parse(json);
var result = jToken["Context"].SelectMany(x => x["location"].SelectMany(y => y["city"].Select(z => z)).ToList());
foreach (var item in result)
{
Console.WriteLine(item);
}
输出:
通过使用以下代码,您可以获得独特的价值
result = result.Distinct();
进一步阅读:
答案 1 :(得分:0)
关于获取城市价值的确切问题,您必须将any
更改为FirstOrDefault
var value = tokens.FirstOrDefault(each=>each["name"].ToString().ToLower().Contains("cities"));
if (value != null)
var city = value["city"];
这将为您提供json节点,而不是告诉您是否存在(如果不存在,则为null)。
您可以使用SelectToken简化所有操作:
var cities = jsonObject.SelectToken("$.Context[?(@.name == 'Cities')].location.city");
我没有尝试最后一次查询,但这向您提示了如何尝试改善json管理。
更多文档在这里:Newtonsoft.Json