【问题标题】:jq: Forming CSV by selectively choosing values from object/embedded arrayjq:通过有选择地从对象/嵌入数组中选择值来形成 CSV
【发布时间】:2016-09-21 15:28:15
【问题描述】:

输入是:

{"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(",")'

我想包含我的对象名称,而且我的对象名称也有所不同,因此我无法真正按硬编码值进行过滤

【问题讨论】:

  • 你尝试了什么?

标签: json export-to-csv jq


【解决方案1】:

你可以这样做:

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

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

【讨论】:

  • 如果你真的想要 "1.2.3.4,myval1,myval3" 而不是 "1.2.3.4","myval1","myval3",那么使用 [join(",")] | @csv 而不是 @csv跨度>
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2015-10-21
    • 2022-01-14
    相关资源
    最近更新 更多