我尝试了近一个小时的不同方法,但我没有得到它;(
我的JSON对象是:
"typeOfHair": {
"value": [
{
"code": "Dry Hair",
"values": [
{
"value": "DryHair",
"language": "en"
},
{
"value": "TrockenesHaar",
"language": "de"
}
]
},
{
"code": "Any Type of Hair",
"values": [
{
"value": "AnyTypeOfHair",
"language": "en"
},
{
"value": "JedenHaartyp",
"language": "de"
}
]
}
]
}
我的任务是使用Newtonsoft.JSON获取语言所在的所有值" de"。 我目前的做法是:
JsonObject.SelectTokens("typeOfHair.value.values[?(@.language == 'de')].value").ToList()
有人可以帮我这个吗?
亲切的问候
答案 0 :(得分:4)
你非常接近。您需要使用JsonPATH通配符运算符value
来考虑外部typeOfHair.value[]
数组[*]
:
var values = JsonObject.SelectTokens("typeOfHair.value[*].values[?(@.language == 'de')].value")
// Convert from JValue to string
.Select(v => (string)v)
// Save in a list
.ToList();
结果是:
["TrockenesHaar","JedenHaartyp"]
示例fiddle。
答案 1 :(得分:-1)
我知道OP明确指定了JSONPath,但为了完整起见,下面是如何使用LINQ to JSON实现相同的目标:
var values = jObject["typeOfHair"]["value"]
.SelectMany(v => v["values"])
.Where(v => (string)v["language"] == "de")
.Select(v => (string)v["value"])
.ToList();