Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从BASH CURL响应中获取JSON值_Python_Json_Curl - Fatal编程技术网

使用Python从BASH CURL响应中获取JSON值

使用Python从BASH CURL响应中获取JSON值,python,json,curl,Python,Json,Curl,在BASH中解析对2个变量的JSON响应时遇到问题。我没有权限安装jq或jsawk或任何让生活更轻松的酷东西。我有蟒蛇,仅此而已 这就是我正在使用的:我有一个curl调用,它得到一个JSON响应。响应存储在一个名为api_response的变量中 API_RESPONSE=$(curl --silent -v -H "Content-Type: application/json" -H "MY-Token: $Token" -XPOST -d "$INPUTS" ${MY_BASE}$MY_PR

在BASH中解析对2个变量的JSON响应时遇到问题。我没有权限安装jq或jsawk或任何让生活更轻松的酷东西。我有蟒蛇,仅此而已

这就是我正在使用的:我有一个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
test-value1
test-value2
我试图从单变量API_响应中提取两个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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib64/python2.6/json/_init__.py”,第267行,已加载
parse_常量=parse_常量,**kw)
文件“/usr/lib64/python2.6/json/_init__uuuu.py”,第307行,加载返回默认解码器解码
文件“/usr/lib64/python2.6/json/decoder.py”,第319行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“/usr/lib64/python2.6/json/decoder.py”,第338行
raise VALUERROR(“无法解码JSON对象”)
ValueError:无法解码任何JSON对象

变量api_响应与以前使用的数据相同。为什么它能与curl调用一起工作,而不是来自变量?

我在朋友的帮助下找到了答案

从bash变量转到python sys.stdin时,需要通过某些操作将bash变量重定向到python sys.stdin

通过将curl执行管道输出到python sys.stdin,它可以工作,因为输出被重定向到python。但一旦我将整个响应存储在bash中的变量中,下一步就是回显输出并重定向到python

[json响应]

[{"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})

myvar1=$( echo $API_RESPONSE | python -c "import sys, json; print json.load(sys.stdin)[0]['value']")
myvar2=$( echo $API_RESPONSE | python -c "import sys, json; print json.load(sys.stdin)[1]['value']")
echo $myvar1
echo $myvar2
[产出]

test-value2
test-value1
test-value2

谢谢,没有帮助我不能就技术的时代争论。我只需要了解python为什么使用curl而不是变量。