Jq:如何将子成员移至父成员?

Ksh*_*rma 3 json parent-child jq

考虑以下 json:

{
  a: {
    b: {
      c: 1,
      d: 2
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如何将 b 的所有属性移至父级 a 下:

{
  a: {
    c: 1,
    d: 2,
    b: {}
  }
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ado 5

对于这种特殊情况,您可以这样做:

$ jq '.a |= (.b = {}) + .b' input.json
Run Code Online (Sandbox Code Playgroud)

在这里,我们a用原始内容更新对象,并将其b替换为空对象,并将其与原始内容组合b

如果这太难以推理,那么这可能更容易理解:

$ jq '.a |=
    with_entries(if .key == "b"
        then (.value = {}), (.value | to_entries[])
        else .
    end)' input.json
Run Code Online (Sandbox Code Playgroud)