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

如何从JSON文件嵌套字段提取指定字段并分文件存储?

首先,先纠正你之前的curl命令问题:你原来的命令curl "https://example.com/public?command=getInfo" > test | python -m json.tool > test是有问题的——> test会直接把curl的输出写入文件,导致后面的python -m json.tool没有输入可以处理。正确的写法应该是先让curl的输出通过管道传给json.tool格式化,再写入test:

curl "https://example.com/public?command=getInfo" | python -m json.tool > test

接下来,针对你提取指定字段并写入对应文件的需求,我分两种方法给你解决:


方法1:用jq(推荐,专门处理JSON的工具)

jq是处理JSON数据的专业工具,比awk更可靠,语法也更直观,能避免文本处理JSON时的各种边缘问题。

生成test2(保存A_B和A_C的Field2):

jq -r '["A_B", "A_C"][] as $key | "\($key): \(.[$key].Field2)"' test > test2

生成test3(保存A_B和A_C的Field5):

jq -r '["A_B", "A_C"][] as $key | "\($key): \(.[$key].Field5)"' test > test3

简单解释:

  • -r参数让jq输出不带引号的原始字符串
  • ["A_B", "A_C"][]用来遍历你需要的两个键
  • \($key): \(.[$key].Field2)直接拼接成你想要的键: 值格式

方法2:用AWK实现(符合你的尝试方向)

因为JSON是结构化数据,awk默认的文本处理逻辑需要针对格式化后的JSON结构做调整。你之前的命令失败,是因为A_B的定义和Field2/Field5不在同一行,且分隔符设置没有匹配JSON的格式。下面是可行的awk命令:

awk '
# 标记当前处于哪个数据块
/A_B/{in_ab=1; in_ac=0}
/A_C/{in_ac=1; in_ab=0}

# 在A_B块中提取Field2和Field5
in_ab && /Field2/{
    split($0, arr, /"|: |,/)  # 用双引号、冒号+空格、逗号作为分隔符拆分行
    print "A_B: " arr[4] > "test2"
}
in_ab && /Field5/{
    split($0, arr, /"|: |,/)
    print "A_B: " arr[4] > "test3"
}

# 在A_C块中提取Field2和Field5
in_ac && /Field2/{
    split($0, arr, /"|: |,/)
    print "A_C: " arr[4] > "test2"
}
in_ac && /Field5/{
    split($0, arr, /"|: |,/)
    print "A_C: " arr[4] > "test3"
}
' test

逻辑说明:

  1. 先通过匹配A_B和A_C的行,标记当前处于哪个数据块
  2. 在对应块中匹配Field2或Field5的行,用split拆分该行,取出对应的值
  3. 把格式化后的内容写入对应的test2或test3文件

执行这个命令后,就能得到你想要的文件内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:38:13