python处理json
来源:互联网 发布:ld3320语音识别算法 编辑:程序博客网 时间:2024/06/06 00:52
python处理json
概念:
1.序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON、XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。
2.JSON(JavaScript Object Notation):一种轻量级数据交换格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集。
3.Python2.6开始加入了JSON模块,无需另外下载,Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding
encoding:把一个Python对象编码转换成Json字符串
decoding:把Json格式字符串解码转换成Python对象
对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。
json.dumps方法对简单数据类型encoding:
import jsondata = [{'a':"A",'b':(2,4),'c':3.0}] #list对象print "DATA:",repr(data)data_string = json.dumps(data)print "JSON:",data_string输出:DATA: [{'a':'A','c':3.0,'b':(2,4)}] #python的dict类型的数据是没有顺序存储的JSON: [{"a":"A","c":3.0,"b":[2,4]}]
json.load方法处理简单数据类型的decoding(解码)转换
import jsondata = [{'a':"A",'b':(2,4),'c':3.0}] #list对象data_string = json.dumps(data)print "ENCODED:",data_stringdecoded = json.loads(data_string)print "DECODED:",decodedprint "ORIGINAL:",type(data[0]['b'])print "DECODED:",type(decoded[0]['b'])输出:ENCODED: [{"a": "A", "c": 3.0, "b": [2, 4]}]DECODED: [{u'a': u'A', u'c': 3.0, u'b': [2, 4]}]ORIGINAL: <type 'tuple'>DECODED: <type 'list'>
import jsondata = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]print 'DATA:', repr(data)unsorted = json.dumps(data)print 'JSON:', json.dumps(data)print 'SORT:', json.dumps(data, sort_keys=True)输出:DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]SORT: [{"a": "A", "b": [2, 4], "c": 3.0}indent参数根据数据格式缩进显示,读起来更加清晰:import jsondata = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]print 'DATA:', repr(data)print 'NORMAL:', json.dumps(data, sort_keys=True)print 'INDENT:', json.dumps(data, sort_keys=True, indent=2)输出:DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]NORMAL: [{"a": "A", "b": [2, 4], "c": 3.0}]INDENT: [ { "a": "A", "b": [ 2, 4 ], "c": 3.0 }]
separators
参数的作用是去掉,
,:
后面的空格,从上面的输出结果都能看到", :"后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上separators参数:
import jsondata = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]print 'DATA:', repr(data)print 'repr(data) :', len(repr(data))print 'dumps(data) :', len(json.dumps(data))print 'dumps(data, indent=2) :', len(json.dumps(data, indent=2))print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))输出:DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]repr(data) : 35dumps(data) : 35dumps(data, indent=2) : 76dumps(data, separators): 29
skipkeys
参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError
的异常。skipkeys
可以跳过那些非string对象当作key的处理.import jsondata= [ { 'a':'A', 'b':(2, 4), 'c':3.0, ('d',):'D tuple' } ]try: print json.dumps(data)except (TypeError, ValueError) as err: print 'ERROR:', errprint print json.dumps(data, skipkeys=True)输出:ERROR: keys must be a string[{"a": "A", "c": 3.0, "b": [2, 4]}]
json格式字符串写入到文件流中
对于大数据,把它编码到一个类文件(file-like)中,
load()
和dump()
方法可以实现。import jsonimport tempfiledata = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]f = tempfile.NamedTemporaryFile(mode='w+')json.dump(data, f)f.flush()print open(f.name, 'r').read()输出:[{"a": "A", "c": 3.0, "b": [2, 4]}]类似的:import jsonimport tempfilef = tempfile.NamedTemporaryFile(mode='w+')f.write('[{"a": "A", "c": 3.0, "b": [2, 4]}]')f.flush()f.seek(0)print json.load(f)输出:[{u'a': u'A', u'c': 3.0, u'b': [2, 4]}]
0 0
- python处理json数据
- Python处理JSON
- Python处理JSON
- python处理json
- Python处理JSON
- Python处理JSON
- Python处理JSON
- Python处理JSON
- Python处理JSON
- Python处理JSON
- python处理JSON字符串
- python处理JSON数据
- Python处理Json报文
- Python处理JSON
- Python处理JSON
- Python 处理 JSON
- Python处理JSON
- Python处理JSON
- Why do I keep getting 'SVN: Working Copy XXXX locked; try performing 'cleanup'?
- 从源码来分析ThreadLocal、Message、Handler、Looper、MessageQueue
- 算法导论 16-1.1活动选择问题 动态规划解
- 自定义一个背景可以滚动的tab栏
- freeMarker简单小总结
- python处理json
- 后台如何拼接easyUI tree格式的 json数据 构建动态树
- 相似性︱python+opencv实现pHash算法+hamming距离(simhash)(三)
- 无题
- poj 1178 Camelot(floyed+动规)
- Linux中修改网卡名字&修改IP地址报错
- MTK Android Driver:UART
- [学习笔记]JavaScript[1]
- arduino+proteus 仿真