我在 JSON 文件中有一个列表apps.json
:
{
"properites":{
"apps":["apple","orange","mango"]
}
}
Run Code Online (Sandbox Code Playgroud)
我需要读取这个文件并获取对象。
我用了:
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
Run Code Online (Sandbox Code Playgroud)
输出是:
mango
Run Code Online (Sandbox Code Playgroud)
我需要的输出是:
apple
orange
mango
Run Code Online (Sandbox Code Playgroud)
解析 JSON 文件的正确方法是使用 JSON 解析器。该jq
实用程序是一种用于在命令行和脚本中使用的解析器:
jq -r '.properites.apps[]' apps.json
Run Code Online (Sandbox Code Playgroud)
这将输出
apple
orange
mango
Run Code Online (Sandbox Code Playgroud)
这要求jq
提取文件中 JSON 文档apps
的顶级对象properites
中的数组元素apps.json
。该-r
选项要求jq
输出“原始”数据而不是 JSON 编码的数据。
要在单行上获得制表符分隔的输出,请使用
jq -r '.properites.apps | @tsv' file
Run Code Online (Sandbox Code Playgroud)
这将输出
apple orange mango
Run Code Online (Sandbox Code Playgroud)
该@tsv
运算符采用一个数组并将其作为制表符分隔的列表输出。您可以改为使用@csv
来获取正确引用的 CSV 输出。
请注意,无论您的 JSON 文档是否为
{
"properites": {
"apps": [
"apple",
"orange",
"mango"
]
}
}
Run Code Online (Sandbox Code Playgroud)
或者
{"properites":{"apps":["apple","orange","mango"]}}
Run Code Online (Sandbox Code Playgroud)
(这些是相同 JSON 文档的等效形式)。