arrays - 嵌套数组结构的 JMESPath 查询

标签 arrays json multidimensional-array aws-cli jmespath

作为 aws 日志 get-query-results 的结果,我具有以下数据结构:

    {
    "status": "Complete", 
    "statistics": {
        "recordsMatched": 2.0, 
        "recordsScanned": 13281.0, 
        "bytesScanned": 7526096.0
    }, 
    "results": [
        [
            {
                "field": "time", 
                "value": "2019-01-31T21:53:01.136Z"
            }, 
            {
                "field": "requestId", 
                "value": "a9c233f7-0b1b-3326-9b0f-eba428e4572c"
            }, 
            {
                "field": "logLevel", 
                "value": "INFO"
            }, 
            {
                "field": "callerId", 
                "value": "a9b0f9c2-eb42-3986-33f7-8e450b1b72cf"
            }
        ],
        [
            {
                "field": "time", 
                "value": "2019-01-25T13:13:01.062Z"
            }, 
            {
                "field": "requestId", 
                "value": "a4332628-1b9b-a9c2-0feb-0cd4a3f7cb63"
            }, 
            {
                "field": "logLevel", 
                "value": "INFO"
            }, 
            {
                "field": "callerId", 
                "value": "a9b0f9c2-eb42-3986-33f7-8e450b1b72cf"
            }
        ],
      ]
    }

AWS CLI 支持 JMESPath 语言来过滤输出。我需要应用一个查询字符串,在返回的“结果”中过滤包含“callerId”作为“字段”的对象,检索“value”属性并获得以下输出:

    [
      {
       callerId: "a9b0f9c2-eb42-3986-33f7-8e450b1b72cf"
      },
      {
       callerId: "a9b0f9c2-eb42-3986-33f7-8e450b1b72cf"
      }
    ]

我做的第一步是使用查询字符串来展平结果数组:results[]

这将读取其他根属性(状态、统计信息),并仅返回一个包含所有 {field: ..., value: ...} 类似对象的大数组。但在此之后,我无法正确过滤那些与 field=="callerId"匹配的对象。除其他外,我尝试了以下表达式但没有成功:

'results[][?field=="callerId"]'
'results[][*][?field=="callerId"]'
'results[].{ callerId: @[?field=="callerId"].value }'

我不是 JMESPath 方面的专家,我正在学习 jmespath.org 网站的教程,但无法使其正常工作。

谢谢!

最佳答案

使用 jq 是一件好事,因为它是更完整的语言,但如果您想使用 JMES Path 来完成这里的解决方案:

结果[*][?field=='callerId'].{callerId: value}[]

获取:

[
  {
    "callerId": "a9b0f9c2-eb42-3986-33f7-8e450b1b72cf"
  },
  {
    "callerId": "a9b0f9c2-eb42-3986-33f7-8e450b1b72cf"
  }
]

关于arrays - 嵌套数组结构的 JMESPath 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321654/

相关文章:

json - Django:相互嵌套序列化器

javascript - 检查数组 A 的数组 B 排列

javascript - 在对象数组javascript中查找并替换值

PHP、Laravel 连接两个查询的结果并有选择地显示在 html/blade 表中

java - 是什么导致我的二维数组发生变化?

javascript - 我有一个包含数千个带有 URL 属性的项目的数组。如何为数组中的每个项目创建一个按钮,以打开 URL 的 iframe?

json - 在perl中访问Json对象并在另一个JSON中重用它

c - 二维数组的第二个下标在传递给函数时有什么用?

C++ 多维数组和指针名称括号

JavaScript/JQuery : multidimensional array loosing scope when initialized in nested loop