本文目录导读:

在脚本(尤其是 Shell、Python、Node.js 等)中解析 JSON,有许多便捷方法,可以避免手动写复杂的字符串处理,以下是各场景下的最佳实践:
Python(最推荐)
标准库(无需安装)
import json
# 解析字符串
data = json.loads('{"name": "张三", "age": 30}')
# 解析文件
with open('data.json') as f:
data = json.load(f)
# 访问数据
print(data['name']) # 张三
使用 jq 风格的工具(更便捷)
pip install jello # 或 pyjq
# 使用 jello(类似 jq 的 Python 实现)
from jello import jello
data = jello('{"a": {"b": 1}}')
print(data.a.b) # 1
Shell 脚本(最常用)
jq(JSON 解析的瑞士军刀)
# 安装:apt install jq / brew install jq
# 解析并提取字段
echo '{"name":"张三","age":30}' | jq '.name' # "张三"
# 从文件读取
cat data.json | jq '.users[0].id'
# 格式化输出
curl -s api.example.com | jq .
# 高级用法:条件过滤
jq '.data[] | select(.type == "user") | .name' data.json
拼凑式方法(不推荐,仅无 jq 时可用)
# 使用 grep/sed 手动解析(很脆弱)
echo '{"key":"value"}' | grep -o '"key":"[^"]*"' | cut -d'"' -f4
Node.js
内置方法
// 解析字符串
const data = JSON.parse('{"name":"张三"}');
// 读取文件
const fs = require('fs');
const config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
// 链式操作
const result = JSON.parse(response).data.items.map(item => item.name);
使用 Lodash(带路径访问)
const _ = require('lodash');
const data = { user: { name: "张三" } };
console.log(_.get(data, 'user.name')); // 张三
console.log(_.get(data, 'user.email', '默认值')); // 默认值
跨语言通用方案
jq(任何语言都能调用)
# 通过子进程调用灵活解析
os.system("echo '{\"key\": \"value\"}' | jq '.key'")
subprocess.run(["jq", ".key", "file.json"])
实用技巧对比
| 场景 | 方法 | 优点 | 缺点 |
|---|---|---|---|
| 快速提取 | jq |
一行搞定,强大 | 需安装 |
| 脚本开发 | Python json |
稳定,无需安装 | 语法略繁琐 |
| 批量处理 | jq + 管道 |
命令组合高效 | 学习曲线 |
| 错误处理 | Python json.loads |
异常捕获方便 | 代码稍多 |
| 嵌套访问 | jq '.a.b.c' |
简洁 | 复杂条件需要学习 |
| 测试/调试 | jq . |
格式化输出 |
终极推荐
- 日常 Shell 操作:装
jq,只用一行命令 - 脚本/自动化:Python
json模块,稳定性最好 - 复杂数据处理:Python +
pandas(可读 JSON 为 DataFrame)
示例:从 API 提取数据的最佳写法
# Shell 脚本一行搞定
curl -s https://api.example.com/users | jq '[.[] | {name, email}]'
# Python 脚本
import json, requests
response = requests.get("https://api.example.com/users").json()
for user in response:
print(user["name"], user.get("email", "无邮箱"))
建议优先掌握 jq(Shell)和 Python 的 json 模块,这两个组合能覆盖 95% 的 JSON 解析需求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播