gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:56 29 4
gpt4 key购买 nike

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

这就是我正在使用的:我有一个获取 JSON 响应的 curl 调用。响应存储在名为 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 调用而不适用于变量?

最佳答案

我在 friend 的帮助下弄明白了。

当从 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-value1
test-value2

关于python - 使用 Python 从 BASH CURL 响应中获取 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450080/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com