【发布时间】:2017-01-03 18:30:17
【问题描述】:
我在解析对 BASH 中 2 个变量的 JSON 响应时遇到问题。我无权安装 jq 或 jsawk 或任何让生活更轻松的酷东西。我有python,仅此而已。
这就是我正在使用的:我有一个 curl 调用,它得到一个 JSON 响应。响应存储在一个名为 api_response 的变量中。
API_RESPONSE=$(curl --silent -v -H "Content-Type: application/json" -H "MY-Token: $Token" -XPOST -d "$INPUTS" ${MY_BASE}$MY_PROCESS${PROCESS})
这个变量本质上是来自 api 的响应的值
[{"name":"test-name1", "value" : "test-value1"},{"name" : "test-name2","value" : "test-value2"}]
过去,我只需要从响应中获取一个值,并且能够使用以下方法做到这一点
API_RESPONSE=$(curl --silent -v -H "Content-Type: application/json" -H "MY-Token: $Token" -XPOST -d "$INPUTS" ${MY_BASE}$MY_PROCESS${PROCESS} | python -c "import sys, json; print json.load(sys.stdin)[1]['value'])
[输出]
test-value2
我试图从单个变量 API_RESPONSE 中提取两个 JSON 值,但这样做会出错。
API_RESPONSE=$(curl --silent -v -H "Content-Type: application/json" -H "MY-Token: $Token" -XPOST -d "$INPUTS" ${MY_BASE}$MY_PROCESS${PROCESS})
myvar1=$($API_RESPONSE | python -c "import sys, json; print json.load(sys.stdin)[0]['value']")
myvar2=$($API_RESPONSE | python -c "import sys, json; print json.load(sys.stdin)[1]['value']")
我收到以下错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib64/python2.6/json/__init__.py", line 267, in load
parse_constant=parse_constant, **kw)
File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads return _default_decoder.decode(s)
File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python2.6/json/decoder.py", line 338, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
变量 api_response 与之前工作的数据相同。为什么它适用于 curl 调用而不是来自变量?
【问题讨论】:
-
谢谢,没有帮助
-
我无法就技术的时代争论不休。我只需要了解为什么 python 使用 curl 内联而不是变量。