如何使用命令行计算JSON对象中的项目?

我从curl命令中获得了这种JSON回复:

 [ { "cid": 49, "pyn": "yi4", "hans": "亿", "hant": "億", "tid": 68, "l10n": "cent million", "pid": 1, "pos": "num", "pos_txt": "" }, { "cid": 50, "pyn": "yi4", "hans": "亿", "hant": "億", "tid": 69, "l10n": "100 millions", "pid": 1, "pos": "num", "pos_txt": "" } ] 

如何使用Bash或命令行(例如underscore )来计算数组中项目的数目(这里是2 )?

只是在混合中投入另一个解决scheme…

试试jq ,一个轻量级和灵活的命令行JSON处理器:

 jq '. | length' /tmp/test.json 

打印对象数组的长度。

最短的expression是

 curl 'http://…' | jq length 

也许你可以用awk继续计数:

 $ awk '/{/ {d++} /}/ {d--} /{/ && d==1 {count++} END{print count}' file 2 
  • /{/ {d++}如果{find了,则增加深度variables。
  • /}/ {d--}如果}被find,递减深度variables。
  • /{/ && d==1 {count++}如果深度是1,它find一个{ ,然后在计数器中添加一个匹配。
  • END{print count}打印结果。

一个简单的解决scheme是安装jshon库:

 jshon -l < /tmp/test.json 2