json - 如果键匹配,则从 bash 中的 json 中提取特定键值

标签 json regex linux bash shell

我有一个 json 内容(output.json)

{"project": {"id": "A", "content": [{"name": "XYZ", "location": "Berlin", "comments":""}, {"name": "ABC", "location": "NewYork", "comments": "Hwllo"}, {"name": "DEF", "location": "Paris", "comments": "Success"}]}}

name 与上面的 json 中的 ABC 匹配时,我想使用 bash 或 shell 命令提取 location 键及其值

我尝试了类似下面的内容,它给出了大括号内的内容。但不确定是否搜索特定的 key 。

cat output.json | grep -o -e "{.*}"

输出预期: 如果 nameABC 匹配,则输出为 "location":"NewYork"

对进一步处理有什么建议吗?

最佳答案

如果可以的话,为了从 json 中提取,你应该使用 jq 。根据作者的说法,“jq 就像 JSON 数据的 sed”(source) .

在你的情况下应该是:

$ jq -r '.project' output.json | jq -r '.content' | jq '.[] | select(.name=="ABC")' | jq -r '.location'

输出将是:

NewYork

要获得您需要的输出,请执行以下操作:

"location":"NewYork"

您可以使用:

echo "\"location\":$(jq -r '.project' output.json | jq -r '.content' | jq '.[] | select(.name=="ABC")' | jq '.location')"

在使用 jq 之前,您应该在 Debian 和 Ubuntu 上安装它:

$ sudo apt install jq

对于其他操作系统,您应该检查 this site .

关于json - 如果键匹配,则从 bash 中的 json 中提取特定键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54254760/

相关文章:

java - 在 java RESTful Web 服务中接收 JSON 对象 (javax.ws..rs.*) Jersey

c# - 将数字部分从字母数字中分离出来

linux - 控制 Linux 嵌入式应用程序的启动屏幕

c - FIFO文件和读/写

perl - 为什么 Perl 的 JSON 模块不读写文件?

json - 无法将文件另存为 JSON?

javascript - 将 evt.data 从 websocket 转换为 jSON 字符串或 Javascript 中的纯字符串

windows - 使用大括号或循环时 sed 出现额外字符错误

python - 如何从一串相连的日期中获取日期

linux - 如何为 debian :jessie 构建 .net 核心应用程序