You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于jq处理JSON输入后输出非JSON格式的技术咨询

解决jq输出非标准JSON格式的问题

嘿,我完全懂你遇到的困扰——你本来指望jq输出合法的JSON结果,结果得到的却是一堆零散的JSON对象凑在一起,不符合JSON规范对吧?

咱来理一理原因:你用.[]把API返回的JSON数组拆成了单个元素,然后对每个元素处理后直接输出。jq默认会把每个处理后的对象单独打印一行,这就导致最终输出是多个独立的JSON对象并列,而JSON的顶级结构只能是单个对象或者数组,所以这种输出自然不被认作标准JSON了。

给你两个简单的解决方案:

方案一:用数组包裹表达式(推荐)

直接把整个过滤逻辑放在方括号里,让jq自动把所有处理后的对象收集成一个数组:

curl -s 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '[ .[] | {message: .commit.message, name: .commit.committer.name} ]'

这样输出的就是一个标准的JSON数组,里面包含你需要的所有对象,完全符合JSON格式要求。

方案二:用--slurp选项合并结果

如果已经有了零散的JSON对象输出,也可以用jq的-s(或--slurp)选项把它们合并成一个数组:

curl -s 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.[] | {message: .commit.message, name: .commit.committer.name}' | jq -s

不过这个方法需要两次调用jq,效率不如第一种,所以更推荐方案一。

你可以验证一下:把原命令的输出管道给jq .,会直接报错;而用方案一的输出管道给jq .,能正常格式化显示,说明输出是合法的JSON啦。

内容的提问来源于stack exchange,提问作者xpt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:29:06