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

-3 grep sed awk json

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

Kus*_*nda 6

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

  • 对我来说很好用。那么您没有使用相同的命令,可能是您错过了`[]`? (3认同)
  • @ShravyaVaggu 然后,1)您使用的命令与我所展示的不同,或者 2)您的 JSON 文档看起来与您的问题中的内容不同,或者 3)您可能期待的不是您在问题中所说的内容。考虑通过让我知道您尝试时发生了什么来帮助我确定问题所在。 (2认同)