我正在使用 bash shell 脚本。我需要使用 shell 脚本执行一个 URL,然后解析来自它的 json 数据。
这是我的 URL - http://localhost:8080/test_beat
我在点击 URL 后得到的响应将来自这两个 -
{"error": "error_message"}
{"success": "success_message"}
下面是我的 shell 脚本,它使用 wget 执行 URL。
#!/bin/bash
DATA=$(wget -O - -q -t 1 http://localhost:8080/test_beat)
#grep $DATA for error and success key
现在我不确定如何解析 $DATA 中的 json 响应并查看 key 是成功还是错误。如果 key 是成功的,那么我将打印一条消息“成功”并打印 $DATA 值并以零状态代码退出 shell 脚本,但如果 key 是错误的,那么我将打印“错误”并打印 $DATA 值并以非零状态码退出 shell 脚本。
如何在 shell 脚本中解析 json 响应并从中提取 key ?
我不想安装任何库来执行此操作,因为我的 JSON 响应是固定的,并且它始终与上面显示的相同,所以任何更简单的方法都可以。
更新:-
下面是我最终的 shell 脚本 -
#!/bin/bash
DATA=$(wget -O - -q -t 1 http://localhost:8080/tester)
echo $DATA
#grep $DATA for error and success key
IFS=\" read __ KEY __ MESSAGE __ <<< "$DATA"
case "$KEY" in
success)
exit 0
;;
error)
exit 1
;;
esac
这看起来对吗?
最佳答案
如果您要从 shell 使用任何更复杂的 json 并且可以安装其他软件,jq将成为你的 friend 。
因此,例如,如果您只想提取错误消息(如果存在),那么您可以这样做:
$ echo '{"error": "Some Error"}' | jq ".error"
"Some Error"
如果您在成功案例中尝试这样做,它将执行:
$echo '{"success": "Yay"}' | jq ".error"
null
该工具的主要优点很简单,它完全理解 json。因此,无需担心极端情况等。
关于json - 如何解析 shell 脚本中的 json 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24644520/