json格式化response報警json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)


遇到問題

將requests請求相應結果json()化時,提示 "JSONDecodeError: Expecting value: line 1 column 1 (char 0)"

import json
import requests
       
resp = requests.get(url).json()
    def raw_decode(self, s, idx=0):
        """Decode a JSON document from ``s`` (a ``str`` beginning with
        a JSON document) and return a 2-tuple of the Python
        representation and the index in ``s`` where the document ended.
    
        This can be used to decode a JSON document from a string that may
        have extraneous data at the end.
    
        """
        try:
            obj, end = self.scan_once(s, idx)
        except StopIteration as err:
>           raise JSONDecodeError("Expecting value", s, err.value) from None
E           json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

../../../../../.pyenv/versions/3.9.4/lib/python3.9/json/decoder.py:355: JSONDecodeError

解決方案:

這個報錯的原因有很多,我的原因是域名或者uri寫錯了。導致請求響應了404, 這個響應消息體無法被json格式化,從而報錯。更多原因可以參考:JSONDecodeError:期望值:第 1 行第 1 列(字符 0)

排查過程

直接執行上面的腳本,發現報出上述報警,可以看出是json格式出問題了,所以打算先去除json格式化這個步驟,先打印出response

import json
import requests
       
resp = requests.get(url).json()

去除json()

import json
import requests
       
resp = requests.get(url)
print("resp: %s" % resp) 

運行結果如下

resp: <Response [404]>

發現響應了404, 說明可能是uri寫錯了, 排查uri之后,發現確實是寫錯了,改正uri之后,再次運行

運行結果如下

resp: <Response [200]>

響應正常了,再加上json()格式化語句,不報上述提示 "JSONDecodeError: Expecting value: line 1 column 1 (char 0)"問題了。說明是響應404導致響應體不能被json格式化,從而報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM