JSONDecodeError:期望值:第1行第1列(char 0)错误

时间:2018-03-20 08:35:46

标签: python json django api decode

我在请求从api获取json时遇到此错误。

我可以使用" / v1 / articles'来获取json数据。路径。

conn = http.client.HTTPSConnection("api.xxxx.com.tr")
    headers = {
    'accept': "application/json", 
    'apikey': "cd6b6c96799847698d87dec9f9a731d6"
    }
    filter = "daily"
    conn.request("GET", "/v1/articles", headers=headers)
    reader = codecs.getreader("utf-8")
    res = conn.getresponse()
    data = json.load(reader(res))
    json.dumps(data)
    return data

但如果我设置过滤器,我有JSONDecodeError。代码:

conn = http.client.HTTPSConnection("api.xxxx.com.tr")
    headers = {
    'accept': "application/json", 
    'apikey': "cd6b6c96799847698d87dec9f9a731d6"
    }
    conn.request("GET", "/v1/articles?$filter=Path eq '/daily/'", headers=headers)
    reader = codecs.getreader("utf-8")
    res = conn.getresponse()
    data = json.load(reader(res))
    json.dumps(data)
    return data

我使用Postman尝试了相同的过滤器,没有错误,我可以获得Json数据。

从Postman返回Json数据:

[
    {
        "Id": "40778196",
        "ContentType": "Article",
        "CreatedDate": "2018-03-20T08:28:05.385Z",
        "Description": "İspanya'da 2016 yılında çalınan lüks otomobil, şasi numarası değiştirilerek Bulgaristan üzerinden getirildiği Türkiye'de bulundu.",
        "Files": [
            {
                "FileUrl": "http://i.xxxx.com/i/xxxx/98/620x0/5ab0c6a9c9de3d18a866eb54.jpg",
                "Metadata": {
                    "Title": "",
                    "Description": ""
                }
            }
        ],
        "ModifiedDate": "2018-03-20T08:32:12.001Z",
        "Path": "/gundem/",
        "StartDate": "2018-03-20T08:32:12.001Z",
        "Tags": [
            "ispanya",
            "Araç",
            "Hırsız",
            "Dolandırıcı"
        ],
        "Title": "İspanya'da çalınan lüks araç Türkiye'de bulundu!",
        "Url": "http://www.xxxx.com.tr/gundem/ispanyada-calinan-luks-arac-turkiyede-bulundu-40778196"
    }
 ]

我无法弄清楚问题。如果有人帮我解决这个问题会很棒。谢谢。

2 个答案:

答案 0 :(得分:3)

问题出在以下一行

data = json.load(reader(res))

当您的回复不是json字符串时,会发生JSONDecodeError。所以,添加一个额外的逻辑来查看响应是None还是json字符串。首先,打印reader(res)并查看返回的内容

答案 1 :(得分:1)

我终于弄明白了这个问题!现在使用requests库解决了我的问题,我可以过滤api请求。

data = requests.get('https://api.xxxxx.com.tr/v1/articles', headers =
headers, params={"$filter":"Path eq '/xxxxxx/'"}).json()

我将此答案留给其他可能在将来需要此解决方案的人。 感谢您的所有建议。