如何使用python处理json数据?本篇文章就给大家介绍使用python处理json数据的基本方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
在介绍使用python处理json数据的基本方法之前,我们首先要了解一下什么是json?
json代表“javascript object notation”,可以说是“基于javascript语言符号的数据格式”。但是,该表示法仅基于javascript,可用于其他各种语言。
json是我们存储和交换数据的一种方式,它通过其语法实现,并在许多web应用程序中使用。json的优点在于它具有人类可读的格式,这可能是在数据传输中使用它的原因之一,此外还有使用api时的有效性。
在json中,数据以名称/值(name/value)对表示;大括号内存储对象,每个名称后跟':'(冒号),名称/值对之间要用(逗号)分隔;方括号包含数组,值以(逗号)分隔。
json格式数据的示例:
{ "book1":{"title": "python beginners", "year": 2005 ,"page": 399},"book2":{ "title": "python developers", "year": 2006 ,"page": 650 }}
下面我们来详细了解一下在python中如何处理json数据。
python使得处理json数据变得简单。实现此目的的模块是json模块。该模块应该包含在python(内置)安装中,因此你不需要像使用pdf和excel文件那样安装任何外部模块。要使用此模块,你唯一需要的是导入它(开头写入):
import json
但是,json库是做什么的呢?此库主要从文件或字符串解析json。它还将json解析为python中的字典或列表,反之亦然,即将python字典或列表转换为json字符串。
读取json(json转python)
读json意味着将json转换为python值(对象)。如上所述,json库将json解析为python中的字典或列表。为此,我们使用loads()函数(从字符串加载),如下所示:
import jsonjsondata = '{"name": "frank", "age": 39}'jsontopython = json.loads(jsondata)
如果要查看输出,请执行 print jsontopython,在这种情况下,你将获得以下输出:
{'age': 39, 'name': 'frank'}
也就是说,数据作为python字典(json对象数据结构)返回。
python转json
上一节我们介绍了json转python,这一节我们将向你展示如何将python值转换(编码)为json。
假设我们在python中有以下字典:
import jsonpythondictionary = {'name':'bob', 'age':44, 'isemployed':true}dictionarytojson = json.dumps(pythondictionary)
如果我们运行 print dictionarytojson,我们得到以下json数据:
{"age": 44, "isemployed": true, "name": "bob"}
因此,此输出被视为对象(dictionary)的数据表示。该方法dumps()是此类操作的关键。
此时需要注意的是,json不能存储所有类型的python对象,只能存储以下类型:列表; 字典; 布尔值; 数; 字符串; 没有。因此,需要转换任何其他类型以便存储在json中。
假设我们有以下课程:
class employee(object): def __init__(self, name): self.name = name
假设我们创建了一个新对象abder,如下所示:
abder = employee('abder')
如果我们想将此对象转换为json,该怎么办?那是json.dumps(abder)?在这种情况下,你将收到类似于以下内容的错误:
traceback (most recent call last): file "test.py", line 8, in <module> abderjson = json.dumps(abder) file "/usr/local/cellar/python/2.7.10_2/frameworks/python.framework/versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps return _default_encoder.encode(obj) file "/usr/local/cellar/python/2.7.10_2/frameworks/python.framework/versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode chunks = self.iterencode(o, _one_shot=true) file "/usr/local/cellar/python/2.7.10_2/frameworks/python.framework/versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode return _iterencode(o, 0) file "/usr/local/cellar/python/2.7.10_2/frameworks/python.framework/versions/2.7/lib/python2.7/json/encoder.py", line 184, in default raise typeerror(repr(o) + " is not json serializable")typeerror: <__main__.employee object at 0x10e74b750> is not json serializable
但是,有解决方法吗?幸运的是有。要解决此问题,我们可以定义类似于以下的方法:
def jsondefault(object): return object.__dict__
然后将对象编码为json,如下所示:
jsonabder = json.dumps(abder, default=jsondefault)
如果你运行 print jsonabder,你应该得到以下输出:
{"name": "abder"}
我们现在已经将python对象(abder)编码为json。
以上就是如何使用python处理json数据的详细内容。