如何用jq提取JSON指定二级字段并以斜线拼接格式输出?
需求:提取JSON指定字段并格式化输出
给定如下JSON数据:
{"cpuUtilization": {"guest": 0,"irq": 0,"system": 1.7,"wait": 0.1,"idle": 86.6,"user": 4.2,"total": 13.4,"steal": 5,"nice": 2.4},"loadAverageMinute": {"one": 0.65,"five": 0.63,"fifteen": 0.5},"memory": {"writeback": 0,"hugePagesFree": 1,"hugePagesRsvd": 0,"hugePagesSurp": 0,"cached": 216624,"hugePagesSize": 2048,"free": 116764,"hugePagesTotal": 325,"inactive": 478084,"pageTables": 6508,"dirty": 620,"mapped": 57336,"active": 649440,"total": 2014212,"slab": 48984,"buffers": 67976}}
需要仅提取其中的cpuUtilization和memory部分,并按如下格式输出:
cpuUtilization\guest = 0 cpuUtilization\irq = 0 ... cpuUtilization\nice = 2.4 memory\writeback = 0 memory\hugePagesFree = 1 ...
尝试用map选项实现该需求,寻求技术帮助。
解决方案
可以使用jq工具实现,通过遍历指定对象的键值对,拼接成目标格式字符串。执行以下命令即可:
jq -r ' (.cpuUtilization | to_entries[] | "cpuUtilization\\\(.key) = \(.value)"), (.memory | to_entries[] | "memory\\\(.key) = \(.value)") ' input.json
命令说明:
to_entries:将对象转换为包含key和value的数组元素,便于遍历子字段。- 字符串拼接部分:手动拼接父对象名、转义后的反斜杠、子字段名和对应值,确保输出格式符合要求。
-r参数:让jq输出原始字符串,而非JSON格式的带引号字符串。
如果输入是从标准输入传入,替换为管道输入即可:
echo '{"cpuUtilization": {...}}' | jq -r '...'
内容的提问来源于stack exchange,提问作者P.Lonnie
相关产品推荐
相关产品推荐

