来自curl的JSON作为函数参数

2024-10-05 13:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用带curl的API,返回一个JSON:

response=$(curl -i --user api:$APIKey --data-binary @$target https://api.tinypng.com/shrink)

接下来,我尝试用一个函数解析响应:

parseJson(){
    result="$1"
    result=($(echo $result | python -mjson.tool))
    result=${result%\"*}
    result=${result##*\"}
    return $result
}

我这样称呼它:message=$(parseJson "$response" message)。仅供参考,回复是多行的。在

但是奇怪的事情发生了:python给了我No JSON object could be decoded,但是如果我回显$result,就会有一个很好的JSON字符串。更奇怪的是,如果我在调用python之前回响了它,那么看起来python似乎是先执行的。在

有什么异步技巧吗?为什么不能将变量字符串传递给python?在

任何帮助或更好的方法将不胜感激!在


Tags: 字符串httpsapijsonmessagetargetdataresponse
2条回答

您可以尝试使用HttpConnection而不是调用curl,并直接在python中执行所有操作:

conn = httplib.HTTPConnection('www.a_url.com')
conn.request("GET", /index.html')
response = conn.getresponse()
status = response.status
if status != 200:
    print 'ERROR'
    sys.exit(1)
reason = response.reason
answer = response.read()

要获取json,只需执行以下操作:

^{pr2}$

我认为No JSON Object could be decoded和{}是这里的关键。该错误通常从美赞臣工具对于空字符串,而格式错误的JSON通常返回更详细的内容。在

JSON解析器不会越过第一个换行符(引号字符串值之外)。它可能接收到类似于\r\n{“key”:“value”}的内容并失败。如果由于某种原因响应在多行上,则应解析出响应正文(JSON),而不必使用前导或尾随的\r\n

相关问题 更多 >

    热门问题