首页 > 解决方案 > 使用 JQ 转置 Json:使用 Map 作为父级时过滤内部列表

问题描述

您好我正在尝试使用 JQ 将 json 从一种格式转换为另一种格式。

我的源 JSON 和 JQ 查询位于:https ://jqplay.org/s/vt_4IbskaS

我的查询问题:

我的 JQ 查询::

{CompletedInstances,status , "AppMap": (.serviceResponse |  map( { (.appId): .assets } ) | add ) }

预期响应:

{
  "AppMap": {
    "testFile1234": {
      "assets": [
        {
          "filename": "testFile1234.scc",
          "rendition": "Dog",
          "assetId": 6565223
        },
        {
          "filename": "testFile1234-BG.wav",
          "rendition": "Dog",
          "assetId": 8234169
        },
        {
          "filename": "testFile1234-DK.wav",
          "rendition": "Dog",
          "assetId": 8234171
        }
      ]
    },
    "testFile4444": {
      "assets": [
        {
          "filename": "testFile1234.scc",
          "rendition": "Dog",
          "assetId": 8842169
        }
      ]
    }
  },
  "CompletedInstances": 0,
  "status": "Completed"
}

标签: jsonselectjq

解决方案


这将获得预期的输出:

{"AppMap": (.serviceResponse 
            | map({ (.appId): ({"assets": (.assets | (map(select(.rendition=="Dog"))
                               | map({filename, rendition, assetId}) ))})}) | add),
 CompletedInstances, status}

推荐阅读