首页 > 解决方案 > 如何在 bash 中获取 JSON 对象的元素?

问题描述

我正在使用 bash 文件执行 curl 命令,返回是一个 json 对象。如何在这个 bash 文件中获取这个 json 对象的元素?

提出请求

https://sms.world-text.com/v2.0/sms/send?id=11111&key=Testkey&srcaddr=DA_Health&dstaddr=000000000000&method=PUT&txt=Message_Text_Text

回复

{"status":"1","error":"1000","desc":"授权失败"}

to="000000000000" message="Test_message" url="https://sms.world-text.com/v2.0/sms/send?id=11111&key=TestKey&srcaddr=SMSMsg&dstaddr=${to}&method=PUT&txt=$ {信息}”

return=$(curl -sm 5 $url --data-urlencode "${message}" -A 'Test')

最后,“return”变量的值如下: {"status":"1","error":"1000","desc":"Authorisation Failure"}

我希望执行该验证

如果 [[ "$status" != 0]]; 然后

&2 echo "$return" fi

但是如何从 bash 文件中的 $return 获取元素“状态”和他的值“1”?

标签: jsonbashcurl

解决方案


使用与 JSON 无关的工具(如 awk、sed 等)处理 JSON 格式在意识形态上是错误的。JSON 格式必须使用支持 JSON 的工具进行处理。

例如,如果您的 curl 响应是多行 JSON(这种情况很常见),那么sed基于该解决方案的解决方案很可能不适合您。

使用 JSON 的 unix 实用程序 jtc之一是,使用该实用程序,您的解决方案将如下所示:

status=$(<<<$return jtc -w[status] -qq)

然后您可以应用您的支票:

if [[ "$status" != 0]]; then
   >&2 echo "$return"
fi

PS>披露:我是jtcJSON操作的-shell cli工具的创建者


推荐阅读