【发布时间】:2019-02-07 11:35:43
【问题描述】:
我正在尝试将 7z 文件内容列表转换为 json,但无法修复输出转换块之间缺少的分隔符。
我在 json 转换方面有点新手,但发现 jq 可以完成这项工作。 我阅读了jq documentation 并在其他地方找到了示例inside here 和there 也没有解决方案。
请查找用例:
命令行:
jq -f pf_7z.jq -R输入文件demo.lst:
Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2018-06-23 14:02:16 D.... 0 0 Installer 2018-06-23 14:02:16 ..... 3381 1157 Installer\Readme 2018-06-23 14:02:16 ..... 4646 1157 Installer\License.txt 2018-06-23 14:02:16 ..... 138892 136152 Installer\Setup.exe过滤文件pf7z.jq:
def parse: def parse_line: . | map(match("(\\d+-\\d+-\\d+) (\\d+:\\d+:\\d+) (D|.).* +(\\d+) +(\\d+) +(.*\\\\)([^\\\\]*)\\.(.*)")) | .[] | ({ "date" :(.captures[0].string), "time" :(.captures[1].string), "attr" :(.captures[2].string), "size" :(.captures[3].string), "path" :(.captures[5].string), "name" :(.captures[6].string), "extn" :(.captures[7].string) }); split("\n") | ( {} + (parse_line)); parse
预期的结果应该是:
{ “日期”:“2018-06-23”, “时间”:“14:02:16”, “属性”:“。”, “大小”:“4646”, "路径": "安装程序\", “名称”:“许可证”, “extn”:“txt” }, { “日期”:“2018-06-23”, “时间”:“14:02:16”, “属性”:“。”, “尺寸”:“138892”, "路径": "安装程序\", “名称”:“设置”, “extn”:“exe” }
而我只得到:
{ “日期”:“2018-06-23”, “时间”:“14:02:16”, “属性”:“。”, “大小”:“4646”, "路径": "安装程序\", “名称”:“许可证”, “extn”:“txt” } { “日期”:“2018-06-23”, “时间”:“14:02:16”, “属性”:“。”, “尺寸”:“138892”, "路径": "安装程序\", “名称”:“设置”, “extn”:“exe” }
块之间没有逗号分隔符。
谢谢 ;-)
【问题讨论】:
-
哎呀!命令行未完全记录: jq -f pf_7z.jq -R
-
您不想生成有效的 JSON 吗?生成有效的 JSON 数组、有效的 CSV 行、YAML 或 TOML ...
-
是的,这就是我希望使用有效的 JSON 结果以便稍后与 JSONedit 一起使用的结果。并使用 JSONEdit 报告我以下错误:无法解析文本。 *第 10 行,第 1 行右括号后的意外文本请参阅第 10 行,第 1 列了解详细信息
标签: json parsing text jq converters