如何将元素移动到(新)孩子?

时间:2018-05-30 12:13:26

标签: json object transformation jq

考虑这个文件:

{"x": [
    {
        "a": {
            "b": [],
            "c": 42
        }
    },
    {
        "a": {
            "d": true
        }
    }
]}

但现在我需要将所有b(不需要存在!)移动到这样的一级:

{"x": [
    {
        "a": {
            "e": {
                "b": []
            },
            "c": 42
        }
    },
    {
        "a": {
            "d": true
        }
    }
]}

我见过the example that does the opposite,但遗憾的是我无法将其应用于我的案例。

1 个答案:

答案 0 :(得分:0)

假设输入是有效的JSON,并且可以在任何可能的地方应用转换,我会使用walk,为简单起见:

walk( if type == "object" and has("b")
      then .e = .b | del(.b)
      else . end )

你可能想要检查.e的存在,以避免破坏它。

如果你的jq没有walk,那么只需在上面插入def;对于定义,只需谷歌:jq“def walk”