如何使用jq工具将指定JSON数据格式化为目标文本格式
使用jq将特定JSON格式转换为自定义文本格式
原始JSON输入
{ "metric": { "container": "container1", "namespace": "namespace1", "pod": "pod1" }, "values": [ [1664418600, "1"], [1664418900, "2"], [1664419200, "6"], [1664419500, "8"], [1664419800, "7"], [1664420100, "9"] ] } { "metric": { "container": "container2", "namespace": "namespace2", "pod": "pod2" }, "values": [ [1664420100, "1"] ] }
期望输出格式
container=container1,namespace=namespace1,pod=pod1 1 1664418600 2 1664418900 6 1664419200 8 1664419500 7 1664419800 9 1664420100 container=container2,namespace=namespace2,pod=pod2 1 1664420100
jq实现命令
直接执行这条jq命令即可完成转换:
jq -r '(.metric | to_entries | map("\(.key)=\(.value)") | join(",")) , (.values[] | "\(.[1]) \(.[] | tonumber)")' input.json
命令说明
-r:让jq输出原始字符串,避免JSON格式的引号和转义字符.metric | to_entries:把metric对象转换为键值对数组,方便后续拼接map("\(.key)=\(.value)") | join(","):将每个键值对拼成key=value格式,再用逗号连接成一行标签,:连接前后两个输出逻辑,先输出标签行,再输出对应的数据行.values[] | "\(.[1]) \(.[] | tonumber)":遍历values中的每个数组,把数值放在前面、转成数字的时间戳放在后面,拼成值 时间戳的格式
内容的提问来源于stack exchange,提问作者walkaround2002
相关产品推荐
相关产品推荐

