Python Json
1、 Python 对象转为 JSON 串
函数 : json.dumps()
功能 : 把 Python 对象转变为 JSON 串
参数 : 可以是列表,字典,字符串, bool 类型等 Python 对象都可以
返回类型 : 字符串
备注 : /
# -*- coding: UTF-8 -*- import json listJson = json.dumps([1, 2, 3]) print 'json.dumps() 返回类型为:', type(listJson) print '列表转换为 json 是:', listJson dicJson = json.dumps({'aaa' : 1, 'bbb' : 2, 'ccc' : 3}) print '字典转换为 json 是:', dicJson
运行结果
json.dumps() 返回类型为: <type 'str'> 列表转换为 json 是: [1, 2, 3] 字典转换为 json 是: {"aaa": 1, "bbb": 2, "ccc": 3}
2、 JSON 串转变为 Python 对象
函数 : json.loads()
功能 : JSON 串转变为 Python 对象
参数 : JSON 串
返回类型 : 根据转换的 JSON 串来确定,比如转换字典,返回类型就是字典,转换列表,返回类型就是列表
备注 : /
# -*- coding: UTF-8 -*- import json nowPythonObject = json.loads('{"aaa": 1, "bbb": 2, "ccc": 3}') print type(nowPythonObject) print nowPythonObject print type(json.loads('[1, 2, 3]')) print json.loads('[1, 2, 3]')
运行结果
<type 'dict'> {u'aaa': 1, u'bbb': 2, u'ccc': 3} <type 'list'> [1, 2, 3]
PS : 咦,怎么转变的字典中有个 'u' 呢,它其实是代表 unicode 码类型,表示解析出来的 Python 对象 aaa 是用 unicode 码进行编码的
3、 读取 .json 文件
函数 : json.load()
功能 : 读取 .json 文件
参数 : .json 文件对象,直接传递 .json 文件路径是不可以的,必须打开 .json 文件,然后传递打开的文件对象
返回类型 : 根据转换的 JSON 串来确定,比如转换字典,返回类型就是字典,转换列表,返回类型就是列表
# -*- coding: UTF-8 -*- import json filePointer = open('testJson.json', 'r') print json.load(filePointer) filePointer.close()
运行结果
{u'a': [100, {u'10': [[u'iPhone', 3600], [u'Xiaoming', 20], [u'Xiaohong', 30]]}]}
4、 常见错误
异常信息提示
No JSON object could be decoded
错误原因分析(第一种代码错误直接看截图,第二种是 .json 文件不正确,重新找一个 .json 文件即可)
解决办法 : 直接删除错误原因的那一行,你可以对照该错误案例来跟正你的代码 (还有一种情况就是 .json 文件不正确,那样子你需要找一个对的 .json 文件)
5、封装为类
# -*- encoding=utf-8 -*- import json import os import WriteLog class ReadJson: def __init__(self, ): self.json_name = '' self.json_data = {} self.log = WriteLog.WriteLog('ITC_LOG.LOG') def _set_json_name(self, json_name): self.json_name = json_name.strip() def _load_json_data(self): if os.path.isfile(self.json_name): try: with open(self.json_name, 'r') as file_handler: self.json_data = json.load(file_handler) except Exception as e: self.log.error('Load json file fail:{}'.format(self.json_name)) self.log.error('Exception:{}'.format(e)) else: self.log.error('Can not find json file:{}'.format(self.json_name)) def _get_json_data(self): return self.json_data def get_data(self, json_name): self._set_json_name(json_name.strip()) self._load_json_data() return self._get_json_data() if __name__ == '__main__': readJon = ReadJson() print readJon.get_data('queuesettings.json')
6、写入文件
# -*- encoding=utf-8 -*- import json if __name__ == '__main__': json_dict = {} json_dict['a'] = 1 json_dict['b'] = 2 json_dict['c'] = '123' print json_dict with open('writeJson.json', 'w') as f: json.dump(json_dict, f)
有时候会报错,那就用下面的写法
# -*- encoding=utf-8 -*- import json if __name__ == '__main__': json_dict = {} json_dict['a'] = 1 json_dict['b'] = 2 json_dict['c'] = '222' # print json_dict data = json.dumps(json_dict) with open('writeJson.json', 'w') as f: f.write(data)
写入文件不支持中文,添加参数ensure_ascii=False即可
json.dump(data_dict,f,ensure_ascii=False)