如何在Python中解析和使用JSON?

395 投票
5 回答
688124 浏览
提问于 2025-04-17 04:20

我的Python程序接收JSON数据,我需要从中提取一些信息。我该如何解析这些数据并使用结果呢?我觉得我需要用到json.loads这个方法,但我不太明白该怎么做。

举个例子,假设我有jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'。在这个JSON中,如果我输入"two",我该如何获取对应的数据"2"呢?


注意,.load是用来处理文件的;.loads是用来处理字符串的。另请参见:从文件读取JSON

有时候,JSON文档是用来表示表格数据的。如果你有这样的数据并想用Pandas来处理,可以参考Python - 如何将JSON文件转换为Dataframe

有些数据表面上看起来像JSON,但并不是JSON

例如,有时候数据是通过对原生Python数据结构使用repr得到的。结果可能会使用不同的引号,或者使用大写的TrueFalse,而不是JSON规定的小写truefalse。对于这种数据,可以查看将字典的字符串表示转换为字典如何将列表的字符串表示转换为列表

另一种常见的变体格式是在输入的每一行上放置单独的有效JSON格式数据。(正确的JSON不能逐行解析,因为它使用的括号是成对的,可能相隔很多行。)这种格式叫做JSONL。可以参考将JSONL文件加载为JSON对象

有时候,来自网络源的JSON数据会多出一些额外的文本。在某些情况下,这样做是为了绕过浏览器的安全限制。这种情况叫做JSONP,详细信息可以查看什么是JSONP,为什么会创建它?。在其他情况下,额外的文本是为了实现某种安全措施,具体可以参考为什么Google在他们的JSON响应前加上while(1);?。无论如何,在Python中处理这些情况都很简单:只需识别并移除额外的文本,然后像之前一样继续处理。

5 个回答

83

如果你要处理的是网址或者文件,就用 json.load() 这个方法。如果你处理的是包含 .json 内容的字符串,那就用 json.loads()

#! /usr/bin/python

import json
# from pprint import pprint

json_file = 'my_cube.json'
cube = '1'

with open(json_file) as json_data:
    data = json.load(json_data)

# pprint(data)

print "Dimension: ", data['cubes'][cube]['dim']
print "Measures:  ", data['cubes'][cube]['meas']
99

有时候,你得到的json数据并不是一个字符串。比如说,当你从一个网址获取json数据时,可能会遇到这样的情况:

j = urllib2.urlopen('http://site.com/data.json')

在这种情况下,你需要使用json.load,而不是json.loads:

j_obj = json.load(j)

(这点很容易忘记:'s'代表的是'string',也就是字符串的意思)

643

非常简单:

import json
data = json.loads('{"one" : "1", "two" : "2", "three" : "3"}')
print(data['two'])  # or `print data['two']` in Python 2

撰写回答