将 json 对象解析为 bash

将 json 对象解析为 bash

我想编写一个 bash 脚本来循环遍历数组“certs”。我读到我可以使用jq包来正确解析 json,但我不想使用任何包。还有其他更简便的方法可以处理这个问题吗?

response = {
  "name": "Test",
  "certs": ["BSc", "MSc"]
}

答案1

您可以使用sed以下命令创建数组内容列表:

sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'

这将选择包含字符串“certs”的行,并从中删除数组中除字符串之外的所有内容。您可以使用命令替换将此列表插入到循环中for

for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//')
  do echo "$i"
done

这将循环遍历所有项目,并将每个项目打印在新行上。

另一种方法sedgrep提取列表并tr删除逗号:

grep -oP 'certs": \[\K.*(?=])' | tr -d ,

示例运行

您提供的示例文本保存在名为“json”的文件中。

$ for i in $(<json sed '/certs/!d;s/[^[]*\[//;s/,//;s/\]$//'); do echo "$i"; done
"BSc"
"MSc"

相关内容