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

Édo*_*pez 157 bash json curl jq

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": ""
  }
]
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*Ken 326

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

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

jq length /tmp/test.json
Run Code Online (Sandbox Code Playgroud)

打印对象数组的长度.

  • 如果你的root不是一个数组而是一个包含一个数组的键的对象,即{"key":[elem1,elem2]},那么你可以使用`jq'.[] | 长度'file.json` (9认同)
  • 惊人的工具,`jq`是.+1 (7认同)
  • 您最初的`jq`代码(`。[]`)返回根数组中每个`object`的长度,而我正在寻找根数组本身的长度。需要修复为`.` (2认同)
  • @MnemonicFlow 的另一个有用选项是 `jq map_values(length) file.json` 。这也会给你钥匙。 (2认同)
  • 如果输入是由独立对象而不是单个数组组成的,则可以使用-s或--slurp选项,它们在读取时将它们收集到数组中:jq -s length file.json (2认同)

nik*_*lay 39

最短的表达是

curl 'http://…' | jq length
Run Code Online (Sandbox Code Playgroud)


yuv*_*lio 24

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

$ curl https://my-source-of-json.com/list | jq -r '.records | length'
2
$ 
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过将其转换为一个 jq 调用来节省额外的系统调用:`jq -r '.records | 长度' (12认同)

Dhr*_*wat 22

如果JSON正在从文件中读取,请尝试以下操作 -

number_of_objects=`jq '. | length' json_file_name.json`
echo $number_of_objects
Run Code Online (Sandbox Code Playgroud)

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

{
  "fruits": [
    "apples",
    "oranges",
    "pears"
  ]
}
Run Code Online (Sandbox Code Playgroud)

尝试这个 -

number_of_objects=`jq '.fruits | length' json_file_name.json`
echo $number_of_objects
Run Code Online (Sandbox Code Playgroud)

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


Kol*_*yon 11

假设这个结构:

(存储在名为 的变量中json

{
    "results": [
        { "id": 1 }
        { "id": 2 }
    ]

}
Run Code Online (Sandbox Code Playgroud)

如果您想计算 results数组中有多少个,命令是:

$json | jq '.results | length'
Run Code Online (Sandbox Code Playgroud)


Édo*_*pez 5

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

jshon -l < /tmp/test.json
2
Run Code Online (Sandbox Code Playgroud)