json - 如何在 bash 中获取 JSON 对象的元素?
问题描述
我正在使用 bash 文件执行 curl 命令,返回是一个 json 对象。如何在这个 bash 文件中获取这个 json 对象的元素?
提出请求
回复
{"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”?
解决方案
使用与 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>披露:我是jtc
JSON操作的-shell cli工具的创建者
推荐阅读
- java - 通过 URL 在 VideoView 中显示视频
- jquery - 为什么无法在包管理器控制台中运行 bower update 命令
- symfony - snc/redis-bundle 在控制器中获取 redist 集群 - symfony 3+
- javascript - Electron - 应用内购买 - 如何使用 PHP 验证苹果收据?
- json - 在 PUG 中渲染 json 数组
- angular - 导入角度材质样式时出错
- java - 这是使用执行器服务实现多线程的正确方法吗?
- javascript - 如何从 JSON 中重新选择值
- sql - 为什么我得到这个输出
- php - 如何绕过PHP中的函数参数?