关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
Python是原生态支持json,这点可以从字典和列表结构看出来。
我们可以利用json模块处理json数据。简单介绍一下json模版的用法。
json模块如下语句引入:
import json
常用有2个方法,也是最基本的使用方法:
1、dumps:把字典转成json字符串
2、loads:把json字符串转成字典
#coding:utf-8 import json test_dict = {'a':1, 'b':2} #把字典转成json字符串 json_text = json.dumps(test_dict) print(json_text) #把json字符串转成字典 json_dict = json.loads(json_text) print(json_dict)
当然,我写的例子所使用的字典也比较简单。大家可以尝试拟一个复杂的,包含数组的字典。
若你尝试使用dir方法看json模块有什么方法时,会发现还有load、dump方法。这两个方法和上面两个方法少了一个字母s。
这两个方法是为了读写json文件提供的便捷方法。举个栗子,json字符串可以保存到文本文件。若只是使用loads和dumps,代码如下所示。
注意:以下代码涉及到utf-8文件读写,可以参考我前面的文章:Python读写utf-8的文本文件
1、把字典转成json字符串,并保存到文件中
#coding:utf-8 import json import codecs test_dict = {'a':1, 'b':2} #把字典转成json字符串 json_text = json.dumps(test_dict) #把json字符串保存到文件 #因为可能json有unicode编码,最好用codecs保存utf-8文件 with codecs.open('1.json', 'w', 'utf-8') as f: f.write(json_text)
2、从json文件中读取到字典中
#coding:utf-8 import json import codecs #从文件中读取内容 with codecs.open('1.json', 'r', 'utf-8') as f: json_text = f.read() #把字符串转成字典 json_dict = json.loads(json_text)
上面代码,我们可以用load和dump修改。
1、dump把字典转成json字符串并写入到文件
#coding:utf-8 import json import codecs test_dict = {'a':1, 'b':2} #把字典转成json字符串并写入到文件 with codecs.open('1.json', 'w', 'utf-8') as f: json.dump(test_dict, f)
2、load从json文件读取json字符串到字典
#coding:utf-8 import json import codecs #从json文件读取json字符串到字典 with codecs.open('1.json', 'r', 'utf-8') as f: json_dict = json.load(f)
这样明显省事很多。
最后,再说一个知识点。如何把json转成有序的字典。
众所周知,字典是无序的。所以json的loads方法转换得来的字典本来就是无序的。
但出于某种需求,需要确保顺序正常,按照原本json字符串的顺序。
这个需要在解析的时候,把无序字典换成有序字典。如下代码:
#coding:utf-8 from collections import OrderedDict import json json_text = '{ "b": 3, "a": 2, "c": 1}' json_dict = json.loads(json_text) print(u"转成普通字典") for key, value in json_dict.items(): print("key:%s, value:%s" % (key, value)) json_dict = json.loads(json_text, object_pairs_hook=OrderedDict) print(u"\n转成有序字典") for key, value in json_dict.items(): print("key:%s, value:%s" % (key, value))
效果如下: