278

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

[
  {
    "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)?

4

6 回答 6

520

只是在混合物中加入另一种解决方案......

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

jq length /tmp/test.json

打印对象数组的长度。

于 2014-01-25T19:50:26.287 回答
70

最短的表达式是

curl 'http://…' | jq length
于 2016-03-31T10:21:46.353 回答
40

您还可以使用jq来跟踪返回的 json 中的数组,然后将其通过管道传递给第二次 jq调用以获取其长度。假设它在一个名为records, like的属性中{"records":[...]}

$ curl https://my-source-of-json.com/list | jq -r '.records | length'
2
$ 
于 2020-09-21T19:23:58.873 回答
7

如果JSON是从文件中读取,试试这个 -

number_of_objects=`jq '. | length' json_file_name.json`
echo $number_of_objects

如果JSON数组位于JSON如下所示的键内 -

{
  "fruits": [
    "apples",
    "oranges",
    "pears"
  ]
}

试试这个 -

number_of_objects=`jq '.fruits | length' json_file_name.json`
echo $number_of_objects

(您必须下载jq此解决方案才能工作)

于 2021-08-24T07:10:54.470 回答
4

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

jshon -l < /tmp/test.json
2
于 2014-01-24T14:45:22.063 回答
2

试试qic。它像 jq/jello 一样工作。qic 也支持交互模式。

猫 test.json | qic "len(_)"

https://walkerever.github.io/qic/

于 2021-07-07T00:40:31.090 回答