jq 将对象键值映射到包含两者的对象数组

Posted

技术标签:

【中文标题】jq 将对象键值映射到包含两者的对象数组【英文标题】:jq map object key value to array of objects containing both 【发布时间】:2020-10-02 04:57:16 【问题描述】:

我想将一个对象父键放入对象本身,并将每个键值对转换为一个数组

给定:


  "field1": 
    "key1": 11,
    "key2": 10
  ,
  "field2": 
    "key1": 11,
    "key2": 10
  

期望的输出

[
   "name": "field1", "key1": 11, "key2": 10,
   "name": "field2", "key1": 11, "key2": 10
]

我知道jq keys 会给我["field1", "field2"]jq '[.[]]' 会给我

[
   "key1": 11, "key2": 10 ,
   "key1": 11, "key2": 10 
]

我想不出一种方法来组合它们,我应该怎么做?

【问题讨论】:

【参考方案1】:

为每个键生成"name": <key> 形式的对象,并将其与键的值合并。

to_entries | map(name: .key + .value)

或:

[keys_unsorted[] as $k | name: $k + .[$k]]

【讨论】:

【参考方案2】:

如下所示。使用 keys[] 获取 JSON 中的键列表,并通过索引每个对象的键添加新字段 name

jq '[ keys[] as $k |  name: $k  + .[$k] ]'

如果您想保持键的顺序,请使用keys_unsorted[]

【讨论】:

以上是关于jq 将对象键值映射到包含两者的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将对象映射到数组以便可以将其转换为 csv?

React 中的数组与键值对(映射/对象)

使用 AlamofireObjectMapper 将对象 json 数据映射到 2 个单独的数组中

我可以将包含字典对象的数组传递给异步映射吗

数组的性能包括与映射到对象并在 JavaScript 中访问它

jq ~ 有没有更好的方法来折叠单个对象数组?