如何使用命令行计算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