如何在Bash中输出单行JSON?jq -c参数出现空输出问题
解决jq生成单行JSON空输出的问题
空输出的核心原因是jq没有正确接收到输入数据,或者命令逻辑没处理好文件内容。下面给你几个可行的解决办法:
方法1:通过变量传递文件内容
这个方法能避免文件内容里的特殊字符(比如引号、换行)干扰jq解析,适配大多数场景:
jq -n -c --arg content "$(cat test.txt)" '{"query": $content}'
参数说明:
-n:让jq不自动读取标准输入,而是用指定表达式构建JSON--arg:把shell读取到的文件内容赋值给jq变量$content-c:强制输出紧凑的单行JSON结构
方法2:让jq直接读取文件
如果文件内容是无特殊字符的纯文本,也可以直接让jq处理文件:
jq -c '{query: .}' test.txt
这里的.代表jq读取到的当前行内容,直接将其作为query字段的值生成单行JSON。
排查小技巧
如果还是出现空输出,先检查文件内容是否正常:
cat -A test.txt
这个命令会显示文件里的所有隐藏字符(比如换行符、制表符),确认文件确实包含primer query这行内容,没有意外的空行或不可见字符。
内容的提问来源于stack exchange,提问作者vkaul11
相关产品推荐
相关产品推荐

