JSON 速通:运维视角的配置规范与排错

运维每天都在和 JSON 打交道——Prometheus 告警规则、Grafana Dashboard、K8s 资源清单、各种服务配置文件,全是 JSON 或它的表亲 YAML。但大多数人只在”报错时”才想起它的语法。这篇用运维视角把 JSON 速通一遍。

一、JSON 是什么(一句话)

JSON = 用文本表示”键值对 + 嵌套”的数据格式,人和机器都能读。本质就是一棵树。

二、只有 6 种数据类型(背下来)

类型 写法 示例
字符串 双引号 "nginx"
数字 直接写 801.5
布尔 true/false true
数组 方括号 ["a","b"]
对象 花括号 {"key":"value"}
null null

注意:字符串必须双引号,单引号在 JSON 里是非法字符——这是新手第一大坑。

三、结构速记:它就是一棵树

1
2
3
4
5
6
7
8
9
{
"server": {
"host": "10.0.8.11",
"port": 80,
"enabled": true,
"tags": ["web", "prod"],
"note": null
}
}

读法:server 是根对象 → 里面 5 个键值对 → tags 是数组。心里有一棵树,嵌套就永远不乱。

四、运维真实配置长什么样

Prometheus 告警规则(每段都是”对象数组”):

1
2
3
4
5
6
7
8
9
[
{
"alert": "NodeDown",
"expr": "up == 0",
"for": "5m",
"labels": { "severity": "critical" },
"annotations": { "summary": "节点 {{ $labels.instance }} 挂了" }
}
]

五、最容易写错的 7 个坑(重点看)

  1. 单引号:JSON 字符串只能用双引号;
  2. 多余逗号:最后一个元素后面不能有逗号(["a","b",] ✗);
  3. 少了逗号:对象/数组元素之间必须有逗号;
  4. 括号不配对:花括号方括号成对出现,层数多时从里往外数;
  5. 键没加引号:键必须是双引号字符串({host: "x"} ✗,{"host":"x"} ✓);
  6. 注释:JSON 不支持注释(YAML 的注释习惯别带进来);
  7. 值裸写undefinedNaN 不是合法值,用 null

六、怎么快速校验「我写的 JSON 对不对」

1
2
3
4
5
6
7
8
9
10
11
# jq(神器,还能提取字段):解析失败会明确报出行列
jq . config.json

# 提取/过滤(运维高频)
jq '.server.port' config.json # 取值
jq '.[] | select(.alert=="NodeDown")' rules.json # 过滤

# python 兜底(没装 jq 时)
python3 -m json.tool config.json

# 在线校验:json.cn 等(生产环境别贴敏感配置!)

七、3 分钟上手练习

1
2
3
# 1. 写一个 10 行配置,用 jq 校验
# 2. 故意写错一处(忘了逗号),看 jq 报错的行号位置
# 3. 用 jq 提取嵌套字段,习惯"树上取值"的思维

八、一句话总结

JSON 的规矩只有 6 种类型和 7 个坑,写完先 jq . 校验再贴进生产配置——这一条习惯能避开 90% 的配置文件事故。遇到 YAML/TOML 同理,格式校验永远在”应用重启”之前。