【问题标题】:JQ convert json array to object propertiesJQ 将 json 数组转换为对象属性
【发布时间】:2021-02-18 18:38:30
【问题描述】:

我的 json 结构如下:

[
    { 
      "name": "object1",
      "prop": "prop1",
      "props": [
        { "prop1": "value1" },
        { "prop2": "value2" },
        { "prop3": "value3" }
      ]
    },
    { 
      "name": "object2",
      "prop": "prop2",
      "props": [
        { "prop1": "value4" },
        { "prop2": "value5" },
        { "prop3": "value6" }
      ]
    }
]

我想提取props 变量的内容并将其作为额外的对象属性,如下所示:

[
    { 
      "name": "object1",
      "prop": "prop1",
      "prop1": "value1",
      "prop2": "value2",
      "prop3": "value3"
    },
    { 
      "name": "object2",
      "prop": "prop2",
      "prop1": "value4",
      "prop2": "value5",
      "prop3": "value6"
    },
]

我一直在尝试使用map,但我似乎无法摆脱数组。

【问题讨论】:

    标签: json object jq


    【解决方案1】:

    使用add将propN对象合并为一个,del删除原来的props

    jq '[.[] | . + (.props | add) | del(.props)]' file.json
    

    您确实可以使用map 将其缩短一点:

    jq 'map(. + (.props | add) | del(.props))' file.json
    

    【讨论】:

    • 等价于jq 'map(. + (.props | add) | del(.props))'
    • 如果我想对其余的对象属性做其他事情,我需要单独做,对吧? jq '{...} | map(...)' file.json.
    • @FedericoNafria:您可以处理地图的结果,例如map(. + (.props | add) | del(.props)) | .[].name |= ascii_upcase.
    猜你喜欢
    • 2022-10-07
    • 2023-01-24
    • 1970-01-01
    • 2022-11-01
    • 2019-02-10
    • 1970-01-01
    • 2015-06-06
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多