如何在Python中格式化JSON文本?
当我使用这个链接调用关于文森特·梵高作品列表的维基百科页面的JSON文件时,
这个,它明显返回了一大堆文本,我觉得这是一种列表的字典。
现在,有人已经给我展示过Python的导入维基百科的功能,所以我就不说这个了。我该如何解码这个JSON呢?我感觉我在Python 3的库里试过所有方法,结果总是出错,比如我试这个代码:
data = urllib.request.urlopen(long_json_url)
stuff = json.load(data) #or json.loads(data)
print(stuff)
它返回
TypeError: the JSON object must be str, not 'bytes'
或者如果我试这个代码:
data = urllib.request.urlopen(longurl)
json_string = data.read().decode('utf-8')
json_data = json.loads(json_string)
print(json_data)
它没有返回错误,但看起来就像什么都没有。
>>>
>>>
但是如果我选中那个空白区域并粘贴,它又会粘贴出同样的一大堆文本。
{'warnings': {'main': {'*': "Unrecognized parameter: 'Page'"}}, 'query': {'normalized': [{'from': 'list of works by Vincent van Gogh',
...等等
如果我尝试一个for循环:
for entry in json_data:
print(entry)
它返回
>>>
query
warnings
>>>
就这样。所以它没有返回错误,但也没返回太多东西,就只有两个值?我该如何将这个JSON数据转成一个可以用的Python字典或列表?或者至少,把它变成一个我能看得懂的更直观的格式?
1 个回答
2
你怎么把JSON数据变成可以用的Python字典或列表呢?
你已经在用这个方法:
json_data = json.loads(json_string)
不过,这个:
for entry in json_data:
print(entry)
只会打印出你字典里的keys
(键)。如果你想打印出对应的值,就需要用:
for entry in json_data:
print(json_data[entry])
如果你检查一下数据,你会发现主字典里有两个keys
。你已经通过遍历字典得到了这些:
{u'query': {...}, u'warnings': {...}}