Jq-使用jq将JSON转换为另一种JSON格式

问题描述 投票:0回答:1

我正在使用jqplay播放格式。以某种方式从某种不同的格式,我能够到达以下格式。但是现在我想更改此格式,如下所示。基本上,我想合并两个ID相同的对象。

'输入'

[
  {
    "id": "7972",
    "secondaryAddresses": {
      "1-2G8AXE": {
        "isDefaultBillingAddress": "true",
        "isDefaultShippingAddress": "true",
      }
    }
  }
]
[
  {
    "id": "7972",
    "secondaryAddresses": {
      "1-4BR2P6B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false",
      }
    }
  }
]
[
  {
    "id": "6980",
    "secondaryAddresses": {
      "1-9BR289B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false",
      }
    }
  }
]
[
  {
    "id": "6980",
    "secondaryAddresses": {
      "1-8B0989B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false",
      }
    }
  }
]

输出

[
  {
    "id": "7972",
    "secondaryAddresses": {
      "1-2G8AXE": {
        "isDefaultBillingAddress": "true",
        "isDefaultShippingAddress": "true",
      },
       "1-4BR2P6B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false",
      }
    }
  },
  {
    "id": "6980",
    "secondaryAddresses": {
      "1-9BR289B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false",
      },
       "1-8B0989B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false",
      }
    }
  }
]

请帮助我。我正在使用某种模板将一个json转换为另一json格式。

json jq
1个回答
0
投票

固定示例输入后,进行以下调用

< sample.json jq -n '
  [inputs[]]
  | group_by(.id)
  | map( reduce .[] as $x
           (.[0]|{id}; 
           .secondaryAddresses += ($x | .secondaryAddresses)))'

产生:

[
  {
    "id": "6980",
    "secondaryAddresses": {
      "1-9BR289B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false"
      },
      "1-8B0989B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false"
      }
    }
  },
  {
    "id": "7972",
    "secondaryAddresses": {
      "1-2G8AXE": {
        "isDefaultBillingAddress": "true",
        "isDefaultShippingAddress": "true"
      },
      "1-4BR2P6B": {
        "isDefaultBillingAddress": "false",
        "isDefaultShippingAddress": "false"
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.