Json 使用JQ交换嵌套对象中的键

Json 使用JQ交换嵌套对象中的键,json,jq,Json,Jq,使用,如何转换: { "a": {"b": 0}, "c": {"d": 1}} 进入: 不知道源中密钥的名称 (我知道在一般情况下,这可能会丢失数据,但我的数据不会丢失) 例如: { "a": {"b": 0}, "c": {"d": 1}} | swapper 产生: {"b":{"a":0},"d":{"c":1}} 下面是一个使用和_条目的替代方法: with_entries(.key as $parent | (.value|keys[0]) as $child | {

使用,如何转换:

{ "a": {"b": 0}, "c": {"d": 1}}
进入:

不知道源中密钥的名称

(我知道在一般情况下,这可能会丢失数据,但我的数据不会丢失)

例如:

{ "a": {"b": 0}, "c": {"d": 1}} | swapper
产生:

{"b":{"a":0},"d":{"c":1}}

下面是一个使用
和_条目的替代方法

with_entries(.key as $parent
  | (.value|keys[0]) as $child
  | {
        key: $child,
        value: { ($parent): .value[$child] }
    }
)

下面是一个使用jq流和变量的解决方案:

[
  . as $d
| keys[]
| $d[.] as $v
| ($v|keys[]) as $vkeys
| {
    ($vkeys): {
       (.): ($vkeys|$v[.])
    }
  }
] | add
很容易忘记最后是什么,所以要更清楚地看到这里发生了什么,需要稍微扩展版本,添加注释和变量

[
  . as $d                    # $d:     {"a":{"b":0},"c":{"d": 1}}
| keys[] | . as $k           # $k:     "a", "c"
| $d[$k] as $v               # $v:     {"b": 0}, {"d": 1}
| ($v|keys[]) as $vkeys      # $vkeys: "b", "d"
| ($vkeys|$v[.]) as $vv      # $vv:    0, 1
| {
    ($vkeys): {              # "b": {     "d": {
       ($k): $vv             #   "a": 0      "c": 1
    }                        # }        , }
  }
] | add
[
  . as $d
| keys[]
| $d[.] as $v
| ($v|keys[]) as $vkeys
| {
    ($vkeys): {
       (.): ($vkeys|$v[.])
    }
  }
] | add
[
  . as $d                    # $d:     {"a":{"b":0},"c":{"d": 1}}
| keys[] | . as $k           # $k:     "a", "c"
| $d[$k] as $v               # $v:     {"b": 0}, {"d": 1}
| ($v|keys[]) as $vkeys      # $vkeys: "b", "d"
| ($vkeys|$v[.]) as $vv      # $vv:    0, 1
| {
    ($vkeys): {              # "b": {     "d": {
       ($k): $vv             #   "a": 0      "c": 1
    }                        # }        , }
  }
] | add