如何通过Bash脚本将JSON数据转换为无空格单行字符串?
正确的Bash脚本实现方法
直接用jq的-c(compact输出)选项就能搞定,这是处理JSON最靠谱的方式——既能把格式化的多行JSON转成单行,还会严格遵守JSON语法,不会乱删字符串内部的合法空格。
核心命令示例
处理文件中的JSON
jq -c . your_input.json > compact_output.json
从管道或变量处理
如果JSON内容存在变量里,或者通过管道传递:
# 示例格式化JSON变量 formatted_json='{ "auths": [ {"username": "james", "token": "abc123"}, {"username": "emma", "token": "def456"} ] }' # 转换为单行紧凑JSON(字符串内部空格会保留) compact_json=$(echo "$formatted_json" | jq -c .) echo "$compact_json"
为什么之前的方法不行
你之前用tr结合jq -R .的问题在于:
tr是盲删所有空格,会把JSON字符串里的合法空格也删掉(比如"name": "James Taylor"会变成"name":"JamesTaylor",直接破坏数据)jq -R是按原始文本行读取,不是解析JSON结构,处理出来的结果根本不是合法的JSON对象,自然会出现键值间残留空格的问题
用jq -c .的话,它会先完整解析JSON结构,再输出紧凑的单行格式,完全符合JSON规范,还能保留字符串内部的必要空格。
内容的提问来源于stack exchange,提问作者James Taylor
相关产品推荐
相关产品推荐

