过滤器和输出以给定字符开头的JSONPath表达式中的值

ie3xauqp  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个如下结构的JSON。我使用JSONPath表达式只过滤值。如何过滤并只输出那些值的前三个字符与给定的三个字符匹配的值?

[
  {
    "firstName": "John",
    "lastName": "doe",
    "age": 26,
    "address": {
      "streetAddress": "naist street",
      "city": "Nara",
      "postalCode": "630-0192"
    },
    "phoneNumbers": [
      {
        "model": "iPhone",
        "number": "0123-4567-8888"
      },
      {
        "model": "iPhoneX",
        "number": "0123-4567-8910"
      }
    ]
  },
  {
    "firstName": "Ram",
    "lastName": "Pavan",
    "age": 29,
    "address": {
      "streetAddress": "Delhi street",
      "city": "Noid",
      "postalCode": "222-211"
    },
    "phoneNumbers": [
      {
        "model": "iPhone 6S",
        "number": "43212-888-9998"
      },
      {
        "model": "iPhone 14",
        "number": "84848-337-83330"
      }
    ]
  }
]

在上面的JSON示例中,我使用以下JSONPath表达式成功地过滤了所有以model为键的值:

$..model

正如预期,输出为所有型号的列表:

[
  "iPhone",
  "Samsung",
  "iPhone 6S",
  "iPhone 14"
]

这很好,但是如果我只过滤那些以给定字符集iphiPhone开头的值,那么我们应该如何编写表达式呢?在这种情况下,期望的输出应该如下所示:

[
  "iPhone",
  "iPhone 6S",
  "iPhone 14"
]
31moq8wy

31moq8wy1#

经过一些尝试,我尝试将Javascript slice()方法应用于值,但在此之前,我还必须向上一级,然后使用过滤器?slice组合过滤该父级下的元素。
下面是适用于我的代码:

$..phoneNumbers[?((@.model).slice(0,3) == "iPh")].model

Slice方法有两个参数(start,end)。在本例中,起始索引是0,结束索引是3,应该等于"iph"。
所需输出:

[
  "iPhone",
  "iPhone 6S",
  "iPhone 14"
]

相关问题