我部分能够使用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'
答案 0 :(得分:-1)
它实际上是在告诉你答案:你正在回到一个字节数组,在Python 3中,由于处理unicode,字符串是不同的。在Python 2.7中,它可以工作。您应该能够通过将字节显式转换为带有
的字符串来修复它jsonget=str(urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee")_