【发布时间】:2018-01-03 00:13:12
【问题描述】:
这个问题和下面的问题很相关
Querying JSON with JSONPath or SelectTokens? With JSON.NET in C#
与上述问题类似,当 JSON 对象并不总是具有相同的简化数据结构时,我如何进行Where 查询,即
{
"video": {
"local_recording_device": {
"codecs": null
},
"preferred_string": "___PREFERRED___",
"streams": {
"22855218": {
"id": "22855218",
"name": "AJA Camera"
},
"99176901": {
"id": "99176901",
"name": "PTZ Camera",
"site": "someone",
"email": "someone@awebsite.com",
"codec": [
"VP8",
"HD1",
"(720p)"
]
},
"3091494011": {
"id": "3091494011",
"name": "Logitech Webcam C930e",
"site": "Joe Smith",
"email": "joe@awebsite.com",
"codec": [
"VP8",
"Medium",
"(CIF)"
]
},
"3798287599": {
"id": "3798287599",
"name": "Drive Camera",
"site": "ASiteName",
"email": "asitesame@awebsite.com",
"codec": [
"HD1",
"(720p)"
]
}
}
}
}
如何让Where 查询在给定的编解码器上工作,例如“VP8”?
如果我这样查询它似乎不适用于我的应用程序:
string json = GetJson();
var obj = JObject.Parse(json);
var testcodec = "VP8";
var streamQuery = obj.SelectTokens("video.streams.*.codec")
.Where(s =>(string)s == testcodec);
但我的结果应该是这样的:
{
"video":{
"local_recording_device":{
"codecs":null
},
"preferred_string":"___PREFERRED___",
"streams":{
"99176901":{
"id":"99176901",
"name":"PTZ Camera",
"site":"someone",
"email":"someone@awebsite.com",
"codec":[
"VP8"
]
},
"3091494011":{
"id":"3091494011",
"name":"Logitech Webcam C930e",
"site":"Joe Smith",
"email":"joe@awebsite.com",
"codec":[
"VP8"
]
}
}
}
}
【问题讨论】:
-
您期望得到什么以及实际得到什么?
-
我想获得一个与原始结构相似但所有元素都满足我查询的数组。在这种情况下,完整的 json 树具有以下两个流 3091494011、99176901