如何用bash/jq将JSON单元素数组转换为对象
解决方案
可以使用jq的with_entries函数在JSON结构层面处理单元素数组的扁平化,彻底避免字符串替换带来的误操作问题:
jq 'with_entries(.value = .value[0])' input.json
命令说明
with_entries:遍历JSON对象的每个键值对,对每个键值对执行后续转换逻辑.value = .value[0]:将每个键对应的数组值,替换为数组的第一个元素
效果验证
针对你的输入JSON:
{ "account_number": [ "123456" ], "account_name": [ "name" ], "account_id": [ 654321 ], "username": [ "demo" ] }
执行命令后会输出期望结果:
{ "account_number": "123456", "account_name": "name", "account_id": 654321, "username": "demo" }
优势对比
和你之前用的sed字符串替换方法不同,这个方案基于JSON语法结构处理:
- 不会误改值内容中包含的
[或](比如值为["user[admin]"]时,处理后会保留原字符串里的方括号) - 严格遵循JSON规范,避免字符串替换破坏JSON结构的风险
内容的提问来源于stack exchange,提问作者TryTryAgain
相关产品推荐
相关产品推荐

