我有一个2MB的json文件,只有全部在一行,现在我使用jq
收到错误:
$ jq .<nodes.json
parse error: Invalid literal at line 1, column 377140
如何在控制台上调试?为了查看上面提到的专栏,我尝试了这个:
head -c 377139 nodes.json|tail -c 1000
但我找不到错误t
的任何错误,所以看起来这不是到达文件中位置的正确方法。
如何调试这样的单线程?
答案 0 :(得分:2)
使用
将文件剪切成更多行cat nodes.json|cut -f 1- -d} --output-delimiter=$'}\n'>/tmp/a.json
并分析/tmp/a.json
,然后你会遇到行nr:
解析错误:第5995行第47行的文字无效
使用less -N /tmp/a.json
查找该行
答案 1 :(得分:0)
我看到你正在shell提示符下。所以你可以试试perl,因为你的操作系统预先安装了它。
cat nodes.json | json_xs -f json -t json-pretty
这告诉json_xs命令行程序解析文件并对其进行美化。
如果您没有安装json_xs,可以尝试使用json_pp(pp适用于纯perl)。
如果两者都没有,则必须使用以下命令安装JSON :: XS perl模块:
sudo cpanm JSON::XS
[sudo] password for knb:
--> Working on JSON::XS
Fetching http://www.cpan.org/authors/id/M/ML/MLEHMANN/JSON-XS-3.01.tar.gz ... OK
Configuring JSON-XS-3.01 ... OK
Building and testing JSON-XS-3.01 ... OK
Successfully installed JSON-XS-3.01 (upgraded from 2.34)
1 distribution installed
这将安装JSON :: XS和一些帮助脚本,其中包括json_xs和json_pp。
然后你可以运行这个简单的单行:
cat dat.json | json_xs -f json -t json-pretty
在错误放置括号以强制在有效的json文件dat.json中的某处出现嵌套错误后,我得到了这个:
cat dat.json | json_xs -f json -t json-pretty
'"' expected, at character offset 1331 (before "{"A_DESC":"density i...") at /usr/local/bin/json_xs line 181, <STDIN> line 1.
也许这比jq输出更有用。