python - requests.json 和 json.loads() JSONDecodeError : Expecting value: line 1 column 1 (char 0)

标签 python json

我正在尝试转换我在 json 中的响应

response = requests.get('http://solr.library.ucla.edu/solr/sheetmusic/select/?q=%5C*%20AND%20(url_keyword:http*)&version=2.2&start=0&rows=100&indent=on&facet=true&facet.field=r_date_facetRange&wt=json&json.wrf=jsonp1530647389471')
response = json.loads(response.content.decode('utf-8'))

但是我得到了这个错误

~/.virtualenvs/pistache/lib/python3.6/site-packages/requests/models.py in json(self, **kwargs)
        890                     # used.
        891                     pass
    --> 892         return complexjson.loads(self.text, **kwargs)
        893 
        894     @property

    /usr/lib/python3.6/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
        352             parse_int is None and parse_float is None and
        353             parse_constant is None and object_pairs_hook is None and not kw):
    --> 354         return _default_decoder.decode(s)
        355     if cls is None:
        356         cls = JSONDecoder

    /usr/lib/python3.6/json/decoder.py in decode(self, s, _w)
        337 
        338         """
    --> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
        340         end = _w(s, end).end()
        341         if end != len(s):

    /usr/lib/python3.6/json/decoder.py in raw_decode(self, s, idx)
        355             obj, end = self.scan_once(s, idx)
        356         except StopIteration as err:
    --> 357             raise JSONDecodeError("Expecting value", s, err.value) from None
        358         return obj, end

    JSONDecodeError: Expecting value: line 1 column 1 (char 0)

最佳答案

此 url 返回的不是 JSON,而是 JSONP .为了解析响应,您可以从 url 中删除最后一个参数 (json.wrf=jsonp1530647389471) - 然后响应将变为 JSON,您将能够使用 json.loads< 解析它.

response = requests.get('http://solr.library.ucla.edu/solr/sheetmusic/select/?q=%5C*%20AND%20(url_keyword:http*)&version=2.2&start=0&rows=100&indent=on&facet=true&facet.field=r_date_facetRange&wt=json')
print json.loads(response.content.decode('utf-8'))
# {u'facet_counts': {u'facet_ranges': {}...

或者,为了更简单:

response = requests.get('http://solr.library.ucla.edu/solr/sheetmusic/select/?q=%5C*%20AND%20(url_keyword:http*)&version=2.2&start=0&rows=100&indent=on&facet=true&facet.field=r_date_facetRange&wt=json').json()

关于python - requests.json 和 json.loads() JSONDecodeError : Expecting value: line 1 column 1 (char 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51162923/

相关文章:

java - 限制JSON数据请求

javascript - 如何创建具有多个键和元素的单个对象?

python求解具有复变量的微分方程

python - 在 Eve 中启用速率限制

python - 将 Pandas 数据框中具有不同日期的较早行的值连接起来

javascript - 将 JSON 数据插入悬停 div,匹配员工

Python Psycopg2 cursor.execute 返回 None

python - 为 CountVectorizer (sklearn) 添加词干支持

java - 带有 Spring Security 的 JSON REST API

javascript - 将 JSON 文件数据填充到数组中,然后将数组输入到 mmenu 插件中