如何在Python中格式化JSON文本?

4
当我调用Vincent van Gogh作品列表维基百科页面的JSON文件时,使用此网址:这个,它显然返回一大块文本,我认为这是某种列表字典。
现在,有人已经向我展示了Python的import wikipedia功能,所以跳过那个。如何解码这个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': {'*': "未识别的参数:'Page'"}},'query':{'normalized':[{'from':'list of works by Vincent van Gogh',...等等

如果我尝试使用for循环:

for entry in json_data:
    print(entry)

它返回:
>>> 
query
warnings
>>> 

以上就是全部内容了。所以它没有返回错误,但也只有两个值?如何将JSON数据转换成可操作的Python字典或列表呢?或者至少将其转换为更加垂直的格式,以便我能够真正阅读?


1
它总是返回一个错误 - 为了让人们不必运行和尝试你的代码 - 请将该错误编辑到你的帖子中,并提供一些我已经尝试过的例子 - 它们是什么 - 它们给出了什么错误/没有任何反应等等...? - Jon Clements
+1 给你,因为你花时间改进了你的问题 - 做得非常好 :) - Jon Clements
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': {...}}

谢谢,我早就怀疑了,这正是我担心的。这个JSON文件中的整个数据块都映射到一个键上,这个键在另一个字典中嵌套在另一个字典中的字典中。这个维基百科API有什么用呢?令人失望。非常感谢你帮助我认识到这一点。 - ian-campbell
1
我已经开始整理这个字典中的值了。我正在取得进展。再次感谢你。 - ian-campbell
@rami7 不用谢!是的,不幸的是整个实际内容似乎是以其他格式存在。如果您有任何其他问题,请告诉我。 - Ahmad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接