【问题标题】:Move specified JSON object from array to a different array [closed]将指定的 JSON 对象从数组移动到不同的数组 [关闭]
【发布时间】:2020-01-29 20:37:15
【问题描述】:

我有数百个格式如下的文件:

{
    "settings": [
        {
            "name": "A",
            "value": "A_value"
        },
        {
            "name": "B",
            "value": "B_value"
        },
        {
            "name": "C",
            "value": "C_value"
        },
        {
            "name": "D",
            "value": "D_value"
        }
    ]
}

并且需要通过将一些名称和值带到另一个数组来修改它们,但只有特定的,例如B 和 D 所以文件看起来像:

{
    "settings": [
        {
            "name": "A",
            "value": "A_value"
        },
        {
            "name": "C",
            "value": "C_value"
        }
    ],
    "settings2": [
        {
            "name": "B",
            "value": "B_value"
        },
        {
            "name": "D",
            "value": "D_value"
        }
    ]
}

如何在 bash 脚本中完成?我有一个必须移动的“名称”列表。

谢谢!

【问题讨论】:

  • 你试过什么?你遇到了什么障碍?
  • “settings2”这个名字是怎么来的?请更清楚地对齐您的解释、示例输入和示例输出。您可能会发现 minimal reproducible example 指南很有帮助。

标签: json bash sed jq


【解决方案1】:

怎么样:

to_move='["B", "D"]'
jq --argjson toMove "$to_move" '{
    "settings":  [.settings[] | select([.name] | inside($toMove) | not)],
    "settings2": [.settings[] | select([.name] | inside($toMove))]
}' file.json
{
  "settings": [
    {
      "name": "A",
      "value": "A_value"
    },
    {
      "name": "C",
      "value": "C_value"
    }
  ],
  "settings2": [
    {
      "name": "B",
      "value": "B_value"
    },
    {
      "name": "D",
      "value": "D_value"
    }
  ]
}

【讨论】:

    猜你喜欢
    • 2019-02-09
    • 2017-07-11
    • 2020-03-26
    • 2023-03-20
    • 2019-12-19
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多