【问题标题】:jmesPath query lookup help. Is this query right?jmesPath 查询查找帮助。这个查询对吗?
【发布时间】:2018-11-19 16:58:58
【问题描述】:

我有这个 JSON 对象:

{
            id: {
              name: "BBCommercialPropertyStructureFloodCoverage",
            },
            carrierData: null,
            link: [
              {
                key: "Location",
                select: {
                  key: "ARRAY_INDEX",
                  value: 0,
                },
              },
              {
                key: "structure",
                select: {
                  key: "ARRAY_INDEX",
                  value: 1,
                },
              },
              {
                key: "Coverage",
                select: {
                  key: "ARRAY_INDEX",
                  value: 0,
                },
              },
            ],
          },

我有几个具有不同索引值的对象。例如,如果我想在这个 id/name: "BBCommercialPropertyStructureFloodCoverage" 上进行匹配,并且位置是值 0,结构是值 1,我该如何使用 jmespath 来做到这一点?

到目前为止我有这个:

const floodCoverageQuery = [?id.name=='BBCommercialPropertyStructureFloodCoverage' && link[key=='Location' && select.value==0]] && link[key=="structure" && select.value==1]]

这样对吗?

【问题讨论】:

    标签: jmespath


    【解决方案1】:

    首先,您在答案中输入的对象树不是真正的 JSON。我已经转换了它,见下文。另外,我想这个对象需要被包装在一个列表中([...]),因为你说“我有几个这样的对象”;并且您“到目前为止”的 jmespath 查询以 [?... 开头,这表明您有一个列表。

    回答

    这应该可以,我已经在jmespath.org 上测试过:

    [?id.name=='BBCommercialPropertyStructureFloodCoverage' && link[?key=='Location' && select.value==`0`] && link[?key=='structure' && select.value==`1`]]

    您的解决方案出了什么问题?

    您的原始查询是这样的:

    [?id.name=='BBCommercialPropertyStructureFloodCoverage' && link[key=='Location' && select.value==0]] && link[key=="structure" && select.value==1]]

    这是我发现的:

    • 右括号 (]) 过多。所以==0]] && 应该是==0] &&(少一个括号)。
    • 您混合了单引号和双引号('")。只有单引号有效raw string literals。 (或者,你可以写成⁠`"string"`⁠,相当于'string'。)
    • 将整数值(0 和 1)包装在反引号(⁠`0`⁠⁠`1`⁠)内,请参阅 literal expressions
    • 检查keyselect.value 的内括号是filter expressions,因此您需要将它们包含在[?] 中,而不仅仅是[...]

    FTR,实际输入为 JSON

    [
      {
        "id": {
          "name": "BBCommercialPropertyStructureFloodCoverage"
        },
        "carrierData": null,
        "link": [
          {
            "key": "Location",
            "select": {
              "key": "ARRAY_INDEX",
              "value": 0
            }
          },
          {
            "key": "structure",
            "select": {
              "key": "ARRAY_INDEX",
              "value": 1
            }
          },
          {
            "key": "Coverage",
            "select": {
              "key": "ARRAY_INDEX",
              "value": 0
            }
          }
        ]
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2011-07-19
      • 2011-04-28
      • 2011-02-01
      • 2010-12-24
      相关资源
      最近更新 更多