【问题标题】:JSON Path for Array Of Array using Jayway JSON Path使用 Jayway JSON 路径的数组数组的 JSON 路径
【发布时间】:2017-12-26 11:14:27
【问题描述】:

我有一个这样的 JSON 结构:

[{
  "firstName": "John",
  "age"      : 26,
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
},
{
  "firstName": "Johny",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}] 

我想提取拥有 Iphone 且名称为 JOHN 的用户。

我用过下面的表达方式

$[?(@.firstName=='John')].phoneNumbers[?(@.type=='iPhone')] 

但我想提取完整的用户信息。我也尝试过 Filter Criteria API,但在其中我无法找到访问电话类型属性的方法。

【问题讨论】:

    标签: arrays json jsonpath


    【解决方案1】:

    正如post 中所述,Jayway 实现支持内联 AND 和 OR 条件。以下 JSON 路径应该满足您的要求。

    $[?(@.firstName=='John' && 'iPhone' in @.phoneNumbers[*].type)]
    

    以下是Jayway JsonPath Evaluator的截图

    另外,请注意语法可能会因使用的实现而异。

    【讨论】:

    • 感谢您的回复。这正是我一直在寻找的。虽然我不知道这个 phoneNumbers[:100] 对 .你能解释一下吗?
    • [:100] 表示此人的前一百个电话号码。假设一个人的电话号码不能超过一百个,这应该可行。理想情况下,它应该是一个人的实际电话号码,由于某种原因我无法从 jsonpath 语法中得到。 :)
    • @priyas - 我发现 [*] 按预期工作,而不是硬编码 [:100]。我已经相应地更新了答案。请检查。
    【解决方案2】:
    for(var i=0;i<s.length;i++){
      for(var j=0;j<s[i].phoneNumbers.length;j++){
        if(s[i].phoneNumbers[j].type == 'iPhone'){
            alert(s[i].firstName+" "+s[i].age+" "+s[i].phoneNumbers[j].type+" 
                  "+s[i].phoneNumbers[j].number);
        }
      }
    }
    

    这里的 var s 是你的 json 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多