转换json从网址

时间:2016-07-24 19:23:43

标签: python json python-3.x

我部分能够使用json保存为文件:

#! /usr/bin/python3

import json
from pprint import pprint

json_file='a.json'
json_data=open(json_file)
data = json.load(json_data)
json_data.close()
print(data[10])

但我试图直接从网络上获得相同的数据。我正在尝试接受的答案here

#! /usr/bin/python3

from urllib.request import urlopen
import json
from pprint import pprint

jsonget=urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee")

data = json.load(jsonget)
pprint(data)

这给了我错误:

  Traceback (most recent call last):
  File "i.py", line 10, in <module>
    data = json.load(jsonget)
  File "/usr/lib64/python3.5/json/__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib64/python3.5/json/__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

这里出了什么问题?

将代码更改为par Charlie的回复:

jsonget=str(urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee"))

data = json.load(jsonget)
pprint(jsonget)

json.load处打破:

Traceback (most recent call last):
  File "i.py", line 9, in <module>
    data = json.load(jsonget)
  File "/usr/lib64/python3.5/json/__init__.py", line 265, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

1 个答案:

答案 0 :(得分:-1)

它实际上是在告诉你答案:你正在回到一个字节数组,在Python 3中,由于处理unicode,字符串是不同的。在Python 2.7中,它可以工作。您应该能够通过将字节显式转换为带有

的字符串来修复它
jsonget=str(urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee")_