簡體   English   中英

使用JQ交換嵌套對象中的鍵

[英]Swap keys in nested objects using JQ

使用jq ,如何轉換:

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

成:

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

不知道源中鍵的名稱?

(我知道這通常會丟失數據,但不會丟失我的數據)

這是使用with_entries的替代方法:

with_entries(.key as $parent
  | (.value|keys[0]) as $child
  | {
        key: $child,
        value: { ($parent): .value[$child] }
    }
)
def swapper:
  . as $in
  | reduce keys[] as $key
      ( {}; . + ( $in[$key] as $o
                  | ($o|keys[0]) as $innerkey
                  | { ($innerkey): { ($key): $o[$innerkey] } } ) ) ;

例:

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

生產:

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

這是使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM