json - 如何解析 shell 脚本中的 json 响应?

标签 json linux bash shell wget

我正在使用 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/

相关文章:

ios - 将 json 对象从 iphone 发送到 java servlet 的时间太长

javascript - Ajax 成功函数无法处理返回的 json 数据和状态 200/304

javascript - dataModel URL javascript 函数不填充网格

bash - 通过 bash 脚本替换 HTML ascii 代码?

linux - 搜索早于特定时间的文件并将其移动到特定文件夹中

json - 为什么 SJCL 在尝试解码此 JSON 片段时会报告 "this is not JSON"?

java - 当运行队列延迟太大时如何调整 Linux 性能?

java - 通过 cli 编译并创建可运行的 jar 文件,如 eclipse

c++ - 为什么 lint 会针对以下代码提示 "Warning 446: side effect in initilizer"和 lint e446?

bash - 是否有 `sh` 相当于 bash 的 `<<<' 重定向运算符?