jq:通过从 object/embedded 数组中有选择地选择值来形成 CSV

jq: Forming CSV by selectively choosing values from object/embedded array

输入为:

{"1.2.3.4":[{"Value":"myval1","Key":"mykey1"},   {"Value":"myval3","Key":"mykey3"},{"Value":"myval2","Key":"mykey2"},{"Value":"myval4","Key":"mykey4"}]}
{"4.5.6.7":[{"Value":"myval1","Key":"mykey1"},   {"Value":"myval3","Key":"mykey3"},{"Value":"myval2","Key":"mykey2"},{"Value":"myval4","Key":"mykey4"}]}

我想得到的是:

"1.2.3.4,myval1,myval3"
"4.5.6.7,myval1,myval3"

基本上提取第一个字段,然后从嵌入值字段中提取 "mykey1" 和 "mykey2" 的值。

编辑:

我尝试过的:

我可以通过执行以下操作来提取值:

jq -c '."1.2.3.4" | .[]' | jq -s 'from_entries | [.mykey1, .mykey2] | join(",")'

我想包括我的对象名称,而且我的对象名称各不相同,所以我不能真正按硬编码值进行过滤

你可以这样做:

$ jq -r --argjson cols '["mykey1","mykey2"]' '[to_entries[] | .key, (.value | from_entries[$cols[]])] | @csv' input.json

将对象转换为条目列表是访问过滤器对象中的键和值的简单方法。

这是另一个概括了 Surki 方法的解决方案:

  keys[] as $k
| .[$k]
| from_entries
| [$k, .mykey1, .mykey2]
| join(",")