脚本中JSON解析有什么便捷方法

wen 实用脚本 2

本文目录导读:

脚本中JSON解析有什么便捷方法

  1. Python(最推荐)
  2. Shell 脚本(最常用)
  3. Node.js
  4. 跨语言通用方案
  5. 实用技巧对比
  6. 终极推荐

在脚本(尤其是 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 解析需求。

抱歉,评论功能暂时关闭!