Jef*_*ang 48 json key object export-to-csv jq
我如何让jq像这样采取json:
{
"host1": { "ip": "10.1.2.3" },
"host2": { "ip": "10.1.2.2" },
"host3": { "ip": "10.1.18.1" }
}
Run Code Online (Sandbox Code Playgroud)
并生成此输出:
host1, 10.1.2.3
host2, 10.1.2.2
host3, 10.1.18.1
Run Code Online (Sandbox Code Playgroud)
我对格式化不感兴趣,我只是无法弄清楚如何访问密钥名称和值.
pea*_*eak 77
要将顶级键作为流获取,可以使用键[].因此,针对您的特定问题的一个解决方案是:
jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'
Run Code Online (Sandbox Code Playgroud)
keys按排序顺序生成密钥名称; 如果您想按原始顺序使用它们,请使用keys_unsorted.
另一种以原始顺序生成密钥的替代方案是:
jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'
Run Code Online (Sandbox Code Playgroud)
@csv和@tsv过滤器在这里也可能值得考虑,例如
jq -r 'to_entries[] | [.key, .value.ip] | @tsv'
Run Code Online (Sandbox Code Playgroud)
生产:
host1 10.1.2.3
host2 10.1.2.2
host3 10.1.18.1
Run Code Online (Sandbox Code Playgroud)
Via*_*lav 30
遇到非常优雅的解决方案
jq 'with_entries(.value |= .ip)'
Run Code Online (Sandbox Code Playgroud)
哪个输出
{
"host1": "10.1.2.3",
"host2": "10.1.2.2",
"host3": "10.1.18.1"
}
Run Code Online (Sandbox Code Playgroud)
以下是要播放的jqplay片段:https://jqplay.org/s/Jb_fnBveMQ
该函数with_entries将对象列表中的每个对象转换为Key/Value-pair,因此我们可以通过使用更新运算符来访问.key或.value分别.value使用该字段更新(覆盖)每个KV项目.ip|=
| 归档时间: |
|
| 查看次数: |
42387 次 |
| 最近记录: |