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

标签 javascript json jsonpath

从下面的示例 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/

相关文章:

java - Jackson是否支持JsonPath注解

java - 如何将数据填充到 Json 模板

javascript - Angular,如何将类设置为单击的列表项并从其他 li 项中删除?

javascript - Goo.gl 的 url 缩短 API 的列表分析

javascript - 在 ASP.NET 项目中使用缓存的最佳方法是什么?

javascript - JSON 请求中既没有 Alert 也没有 Console.log 触发

android - 模块根文件夹中缺少文件 google-services.json(但它在好地方!)

javascript - 滚动到下一个元素

json - 如何使用 python 将 JSON 数据转换为 .tsv 文件。

c# - 从 char 索引确定 JSONPath