如何仅使用jq将指定格式文本文件转换为目标结构JSON?
可以用jq完成这个转换,以下是具体实现方案
假设你的输入文件名为input.txt,直接运行以下jq命令就能完成格式转换:
jq -Rn ' reduce inputs as $line ({}; ($line | capture("(?<key>[^=]+)=\"(?<value>[^\"]*)\"")) as $parsed | .[$parsed.key] = ($parsed.value | if length == 0 then [] else split(" ") end) ) ' input.txt
命令细节说明:
-Rn参数:-R让jq把输入当作原始文本行处理,-n配合inputs实现逐行读取处理每一行内容reduce语句:从空对象开始,逐行处理输入文本,逐步构建目标JSON对象- 正则捕获:
capture("(?<key>[^=]+)=\"(?<value>[^\"]*)\"")精准匹配每一行的key="value..."格式,分别提取键名和对应的值字符串 - 值处理逻辑:
- 如果捕获到的值是空字符串(对应原文件里的
""),则设为空数组[] - 否则用
split(" ")把空格分隔的多个值拆分成数组
- 如果捕获到的值是空字符串(对应原文件里的
实际测试效果:
输入文本:
keya="valuea valueb" keyb="" keyc="valuex"
执行命令后输出的JSON:
{ "keya": ["valuea", "valueb"], "keyb": [], "keyc": ["valuex"] }
完全符合你需要的结构,不用再依赖Python解析。
内容的提问来源于stack exchange,提问作者placplacboom
相关产品推荐
相关产品推荐

