如何使用嵌套表达式查找JSON对象?

时间:2014-12-12 15:39:53

标签: javascript json jsonpath

从下面的示例JSON中,我想返回source.id ==' x'的对象的target.id值。

所以source.id ==' startId' return 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 ==&#39; startId&#39;)]返回错误。< / p>

我也明白我可以在代码中遍历每个对象,但如果我有数十或数百行&#39;那么它就不会非常有效。通过工作。如果可能的话,我想要一个更直接的&#39;对象的路径。

我使用javascript对应用程序的其余部分进行编码,因此javascript示例会有所帮助(使用或不使用JSONPath)。

1 个答案:

答案 0 :(得分:1)

如果您将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 });