加入jq数组,用于CSV输出

时间:2016-02-15 06:07:57

标签: csv jq

我希望基于两个json数组创建一个CSV(数组是一个带有键值对的大型jason数组的缩减)

[
  "Name",
  "Role",
  "Type",
  "Service",
  "Group",
]
[
  "some-server.com",
  "web server",
  "production",
  "apps",
  "main",
]

我能够更少地获得我正在寻找的东西:

jq -r '[.Tags[].Key], [.Tags[].Value] | join (",")' output.json

问题是,密钥并不总是以相同的顺序排序。对于某些对象,我得到了:

Name, Role, Type

和其他时间:

Role, Type Name ..

我正在寻找一种让输出保持一致的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法规范化对象:

def sortKeys: to_entries | sort | from_entries

例如,如果A是非标准化对象的数组,则可以写:

A | map(sortKeys)

或者可以在创建对象后立即对其进行规范化。

对于CSV,您可能希望根据预先确定的键名数组修复订单。在这种情况下,您可以使用:

def selectKeys(keys):
  . as $in | reduce keys[] as $k ({}; . + {($k): $in[$k]})