调试一行中的大型json文件

时间:2015-10-12 23:24:20

标签: json debugging jq

我有一个2MB的json文件,只有全部在一行,现在我使用jq收到错误:

$ jq .<nodes.json

parse error: Invalid literal at line 1, column 377140

如何在控制台上调试?为了查看上面提到的专栏,我尝试了这个:

head -c 377139 nodes.json|tail -c 1000

但我找不到错误t的任何错误,所以看起来这不是到达文件中位置的正确方法。

如何调试这样的单线程?

2 个答案:

答案 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输出更有用。