You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash jq读取字段名为数字的JSON文件?

如何用jq访问JSON中数字命名的字段?

你的问题出在Unix Shell的引号解析规则和jq语法的结合上,直接用.datasets."0"或者.datasets.0会触发语法错误,以下是正确的解决方法:

正确的访问方式

方式1:方括号语法(推荐)

用["键名"]的形式包裹数字键,同时给整个jq表达式套上单引号,避免Shell解析干扰:

# 访问datasets下的"0"字段
jq '.datasets["0"]' your_file.json

# 嵌套访问更深的数字键,比如datasets["0"]["0"]["0"]
jq '.datasets["0"]["0"]["0"]' your_file.json

方式2:转义引号(不推荐,易出错)

如果坚持用.的写法,需要给整个jq表达式套上双引号,并转义内部的双引号:

jq ".datasets.\"0\"" your_file.json

这种方式容易因为Shell环境的差异出现问题,所以优先用方括号写法。

错误原因解析

当你在命令行输入jq .datasets."0"时,Shell会先处理引号,把."0"解析成.0,传给jq的表达式变成了.datasets.0。而jq的语法中,. 后面只能跟合法的标识符(不能以数字开头),所以直接写.0会触发语法错误。

而["0"]是jq中访问任意字符串键的通用写法,不管键名是数字还是特殊字符都能正常工作。

额外技巧:遍历所有数字键

如果需要批量处理datasets下的所有数字键,可以用to_entries把对象转成键值对数组:

jq '.datasets | to_entries[]' your_file.json

输出会类似:

{
  "key": "0",
  "value": {
    "0": { "0":11, "1":11,"2":10 },
    "1": { "0":73, "1":77, "2":87 },
    ...
  }
}

内容的提问来源于stack exchange,提问作者SaverioV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:37:44