本文目录导读:

在Shell脚本中解析JSON有多种方法,这里介绍几种常用的方式:
使用 jq (推荐)
jq 是专门用于处理JSON的命令行工具,功能最强大。
安装jq
# Ubuntu/Debian sudo apt-get install jq # CentOS/RHEL sudo yum install jq # macOS brew install jq
基本用法示例
# 示例JSON数据
json='{"name": "Alice", "age": 30, "city": "Beijing"}'
# 解析单个字段
echo "$json" | jq -r '.name'
# 输出: Alice
# 解析嵌套对象
json='{"user": {"name": "Bob", "age": 25}}'
echo "$json" | jq -r '.user.name'
# 输出: Bob
# 解析数组
json='{"users": [{"name": "Alice"}, {"name": "Bob"}]}'
echo "$json" | jq -r '.users[0].name'
# 输出: Alice
# 遍历数组
echo "$json" | jq -r '.users[].name'
# 输出: Alice Bob
使用Python
#!/bin/bash
# 方法1: 使用python3
json='{"name": "Alice", "age": 30}'
name=$(python3 -c "import json,sys; print(json.loads('$json')['name'])")
echo $name
# 方法2: 处理文件
echo '{"name": "Alice"}' > data.json
python3 -c "import json; print(json.load(open('data.json'))['name'])"
# 方法3: 处理curl输出
curl -s https://api.example.com/user | python3 -c "
import json,sys
data = json.load(sys.stdin)
print(data['name'])
"
使用awk(简单场景)
#!/bin/bash
# 仅适用于简单格式的JSON
json='{"name": "Alice", "age": 30}'
echo "$json" | awk -F'"' '/"name":/{print $4}'
完整脚本示例
#!/bin/bash
# 从API获取JSON并解析
get_user_info() {
local user_id=$1
# 模拟API请求
local response='{
"status": "success",
"data": {
"id": 1,
"name": "Alice",
"email": "alice@example.com",
"roles": ["admin", "user"]
}
}'
# 检查是否有jq
if command -v jq &> /dev/null; then
# 使用jq解析
echo "用户名: $(echo $response | jq -r '.data.name')"
echo "邮箱: $(echo $response | jq -r '.data.email')"
echo "角色: $(echo $response | jq -r '.data.roles[]')"
else
# 使用python作为备选
echo "$response" | python3 -c "
import json,sys
data = json.load(sys.stdin)
if data['status'] == 'success':
user = data['data']
print(f\"用户名: {user['name']}\")
print(f\"邮箱: {user['email']}\")
print(\"角色: \" + ', '.join(user['roles']))
"
fi
}
# 调用函数
get_user_info 1
jq 常用操作示例
#!/bin/bash
# 示例数据
json='{
"users": [
{"name": "Alice", "age": 30, "city": "Beijing"},
{"name": "Bob", "age": 25, "city": "Shanghai"},
{"name": "Charlie", "age": 35, "city": "Beijing"}
]
}'
echo "所有用户:"
echo "$json" | jq -r '.users[].name'
echo "年龄大于30的用户:"
echo "$json" | jq -r '.users[] | select(.age > 30) | .name'
echo "北京的用户的年龄:"
echo "$json" | jq -r '.users[] | select(.city == "Beijing") | "\(.name): \(.age)"'
echo "统计:"
echo "$json" | jq -r '.users | length'
echo "格式化输出:"
echo "$json" | jq '.'
推荐使用策略
- 首选jq - 功能最全,性能最好
- 备选Python - 大部分系统都预装
- 避免正则解析 - 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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播