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


178

JSONcurl命令中得到这种回复:

[
  {
    "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": ""
  }
]

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


JavaScript解决方案适合您吗?
thefourtheye 2014年

通过NPM模块是。否则,不会。
爱德华·洛佩兹

检查我的解决方案。不需要npm。纯JavaScript。
thefourtheye 2014年

1
我在bash背景下,没有网络
爱德华·洛佩兹

您知道可以在Shell中执行JavaScript,对吗?
thefourtheye 2014年

Answers:


356

只是在混合中抛出另一种解决方案...

试试看jq,一个轻巧灵活的命令行JSON处理器:

jq length /tmp/test.json

打印对象数组的长度。


4
您的初始jq代码(.[])返回object根数组中每个数组的长度,而我正在寻找根数组本身的长度。需要修复.
爱德华·洛佩兹

11
如果您的根不是数组,而是带有包含数组的键的对象(即{“ key”:[elem1,elem2]}),则可以使用usejq '.[] | length' file.json
bitek 2015年

8
了不起的工具jq。+1
Ory Band

该@MnemonicFlow的另一个有用的选项是jq map_values(length) file.json。那也将给您钥匙。
Paulo Casaretto,2013年

3
而且,如果您的输入是由独立的对象而不是单个数组组成的,则可以使用-sor --slurp选项,该选项将在阅读时将它们收集到一个数组中:jq -s length file.json
hemflit


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.