【发布时间】:2015-05-12 08:47:20
【问题描述】:
我想GET 来自服务器的一些 json 数据。我这样做是:
UPDATE=$(curl -i -H "Accept: application/json" -H "Content-Type: application/json" --cookie "${COOKIE_NAME}" "${1}/update/${DEVICE_NAME}");
在此之前,服务器已经过身份验证。 ${1} 是服务器域,${DEVICE_NAME} 是请求更新的设备的名称。
这会返回一个 JSON,如下所示:
[{"_id":"54ff35887d8ef574029b9166","user":"54fe4313883bcec2c0ac0d64","__v":0,"created":"2015-03-10T18:18:48.023Z","status":"可用","pbo_udid":"lemaker","installation_script":"","description":"打印 你好世界 控制台","package_name":"helloworld_1.0-1.deb","name":"Hello World V1"}]
我现在想做两件事:
- 确保返回数据(如果没有可用更新,服务器返回
[] - 提取数据,例如
package_name
如何在 Linux bash 脚本中执行这些操作?
【问题讨论】:
-
您可能需要将 JSON 值传递给 CLI,以便脚本处理器可以反序列化 JSON 字符串并提取您要查找的数据。 (例如 PERL、PHP 等)。当然,到那时,我可能只会编写整个逻辑来检索和提取该脚本语言中的数据。除此之外,您可能会考虑将
sed、awk等一些尴尬的组合放在一起,从本质上构建一个反序列化器。 -
有一些非常棒的工具可以从 bash 中解析 JSON;
jq就是其中之一。