![如何使用 awk 和 sed 读取 JSON 文件中的列表](https://linux22.com/image/187955/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20awk%20%E5%92%8C%20sed%20%E8%AF%BB%E5%8F%96%20JSON%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%88%97%E8%A1%A8.png)
我有一个 JSON 文件列表apps.json
:
{
"properites":{
"apps":["apple","orange","mango"]
}
}
我需要读取这个文件并获取对象。
我用了:
fwk_app = $( awk '/apps/{ print }' ${apps.json} | grep apps | awk -F: '{ print } substr($0, index($0,$2))}' |sed 's/(,*\)"[/\"]*$/\1/' );
for item in fwk_app:
do
echo"$item"
done
输出是:
mango
我需要的输出是:
apple
orange
mango
答案1
解析 JSON 文件的正确方法是使用 JSON 解析器。这jq
公用事业就是这样一种解析器,用于命令行和脚本:
jq -r '.properites.apps[]' apps.json
这将输出
apple
orange
mango
这要求提取文件中 JSON 文档的顶级对象中的jq
数组元素。该选项要求输出“原始”数据而不是 JSON 编码的数据。apps
properites
apps.json
-r
jq
要在单行上获取制表符分隔的输出,请使用
jq -r '.properites.apps | @tsv' file
这将输出
apple orange mango
该@tsv
运算符接受一个数组并将其输出为制表符分隔的列表。您可以改为使用@csv
来获取正确引用的 CSV 输出。
请注意,无论您的 JSON 文档是否为
{
"properites": {
"apps": [
"apple",
"orange",
"mango"
]
}
}
或者
{"properites":{"apps":["apple","orange","mango"]}}
(这些是同一 JSON 文档的等效形式)。
答案2
你可以使用python
:
python -c '
import json, sys
data = json.load(sys.stdin)
for el in data["properites"]["apps"]:
print (el)
' < apps.json
答案3
答案4
grep -P
如果可用,您还可以使用:
grep -wF '"apps":' apps.json | grep -Po '[[,]"\K[^"]*'
但是,这(以及awk
@Carlos提供的解决方案)仅在输入为确切地如图所示,如果json
相同内容的格式不同,则不会。
一个合适的json
解析器,例如jq
orpython
的json
模块应该是首选!