Python中对于字典形式的字符串该如何处理呢?一种方法是使用内置的的pickle模块,关于这个模块的用法,在Python常用内置模块之pickle模块一文中已经有了说明。另一种方法是使用Python的内置json模块。下面就来看看Python常用内置模块之json模块的用法吧。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
实际上JSON就是Python字典的字符串表示,但是字典作为一个复杂对象是无法直接传递,所以需要将其转换成字符串形式,转换的过程也是一种序列化过程。需要注意的是,Python内置json模块序列化时,字符串中的字典类型的键名必须是英文双引号的格式。代码示例如下:
#!/usr/bin/env python # coding:utf-8 import json s1 = '{"name":"风轻情淡","age":28,"address":"深圳"}' d1 = json.loads(s1, encoding="utf-8") # 结果为:{'name': '风轻情淡', 'address': '深圳', 'age': 28} <class 'dict'> print(d1, type(d1))
Python JSON模块可以直接处理简单数据类型(string、unicode、int、float、list、tuple、dict)。 json.dumps()方法返回一个str对象,编码过程中会存在从python原始类型向json类型的转化过程,具体的转化对照如下:
json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的)、separators指定分隔符,indent格式对齐等参数,dumps方法的定义为:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
示例代码如下:
#!/usr/bin/env python # coding:utf-8 import json d1 = {"name": "风轻情淡", "age": 28, "address": "深圳"} s2 = json.dumps(d1, separators=(',', '='), indent=4) print(s2, type(s2))
代码结果如下:
{ "name"="\u98ce\u8f7b\u60c5\u6de1", "address"="\u6df1\u5733", "age"=28 } <class 'str'>
另外,json模块中还有load和dump方法,与loads和dumps的区别是前者是从文件中读取需要处理的对象。