我有一个 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 "{.*}"
输出预期:
如果 name
与 ABC
匹配,则输出为 "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/