Awk

如何使用 awk 和 sed 讀取 JSON 文件中的列表

  • February 12, 2021

我在 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

解析 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 文件的等效形式)。

你可以使用python

python -c '
import json, sys
data = json.load(sys.stdin)
for el in data["properites"]["apps"]:
 print (el)
' < apps.json

引用自:https://unix.stackexchange.com/questions/634066