从下面的示例 JSON 中,我想返回一个对象的 target.id 值,其中 source.id == 'x'。
因此,其中 source.id == 'startId' 返回 target.id == '3eecd840-e6a8-423c-a892-7df9646fde5d'。
{
"line":[
{
"type":"link",
"source":{
"id":"startId",
"port":"out"
},
"target":{
"id":"3eecd840-e6a8-423c-a892-7df9646fde5d",
"port":"in"
},
"id":"87d88a26-3a28-4db0-8016-71c1c4665f14"
},
{
"type":"link",
"source":{
"id":"3eecd840-e6a8-423c-a892-7df9646fde5d",
"port":"outYes"
},
"target":{
"id":"49940c02-70f2-4c53-ab50-9cbf96903600",
"port":"in"
},
"id":"9f8c365e-9ca7-440f-a722-c4f340782c0c"
}
]
}
我尝试过 JSONPath,但无法计算出要使用的表达式。 $.line[*].source.id 为我提供源 ID 列表,而 $.line[?(@.source.id=='startId')] 返回错误。
我也明白我可以迭代代码中的每个对象,但是如果我有数十或数百条“行”需要处理,那么效率就不会很高。如果可能的话,我想要一个更“直接”的对象路径。
我使用 javascript 来编写应用程序的其余部分,因此 javascript 示例会很有帮助(带或不带 JSONPath)。
最佳答案
如果您要获取字符串形式的 json,请使用 var json = JSON.parse(jsonStr)
。然后你可以用Array.filter
var result = json.line.filter(function(obj){
return obj.source.id == "startId"
});
然后你可以得到这样的值
var ids = result.map(function(o){ return o.target.id });
关于javascript - 如何使用嵌套表达式查找 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447062/