【问题标题】:JSONDecodeError: Expecting value: line 1 column 1 (char 0) errorJSONDecodeError:期望值:第 1 行第 1 列(字符 0)错误
【发布时间】:2018-08-28 23:47:01
【问题描述】:

我在请求从 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"
    }
 ]

我无法弄清楚问题所在。如果有人帮助我解决这个问题,那就太好了。谢谢。

【问题讨论】:

  • 这很难解决,因为我无法访问您的资源,我只能建议使用更强大的客户端,例如 requests 可能会解决问题@987654321 @
  • conn.request("GET", "/v1/articles?$filter=Path eq '/daily/'", headers=headers) 你确定网址应该有$吗?
  • @DeepSpace 是的 url 应该有它。
  • 我真的非常怀疑这一点。它也不应该有空格或引号。您要连接的 API 是什么?
  • 这段代码还有其他奇怪的地方。例如,json.dumps(data) 本身实际上什么都不做

标签: python json django api decode


【解决方案1】:

我终于找到了问题所在!使用 requests 库解决了我的问题,现在我可以过滤 api 请求了。

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

我将把这个答案留给将来需要这个解决方案的任何人。 感谢您的所有建议。

【讨论】:

    【解决方案2】:

    问题出在下面一行

    data = json.load(reader(res))
    

    当您的响应不是 json 字符串时,会出现 JSONDecodeError。因此,添加一个额外的逻辑来查看响应是None 还是json 字符串。首先,打印reader(res),看看返回的是什么

    【讨论】:

    • 我尝试打印 reader(res) 这是返回的内容。
    • 你能看看这个链接吗,stackoverflow.com/questions/35036921/…
    • 哦,你能腌制那个输出并在这里分享吗,我可以看看
    • 我在问题中包含了回溯。谢谢你的努力。
    • 不,不是回溯。为了纠正它,我们需要解码响应中返回的对象。所以,如果你可以将对象保存为泡菜文件并在此处上传,我可以尝试从中获取 json
    猜你喜欢
    • 2013-05-10
    • 2019-02-25
    • 2018-06-28
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    相关资源
    最近更新 更多