使用Python内置类处理Json格式报文
前言:Json作为更加出色的数据格式,已经越来越广泛应用于各种领域,金融银行体系也不例外,但是金融底层语言多采用python语言,在工作第一次接触新互联网核心json格式的报文,在了解学习后将内容整理出来,供大家参考,有部分内容引用自网络,如有侵权,请告知。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
Python2.6开始加入了JSON模块,无需另外下载,Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding,我们可以通过im
port的方式直接调用JSON模块的功能,其中主要包括编码与解码部分:
encoding:把一个Python对象编码转换成Json字符串
decoding:把Json格式字符串解码转换成Python对象
对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。
代码如下:
import json;
dict = {"acnotp": '01','passwd': '223','acctno': '0101', 'redentialno': 10.1, 'credentialtype': ['1','2']};
print "Python:",repr(dict);
jsonstr = json.dumps(dict);
print "Json:",jsonstr;
结果:
Python: {'passwd': '223', 'redentialno': 10.1, 'acctno': '0101', 'credentialtype': ['1', '2'], 'acnotp': '01'}
Json: {"passwd": "223", "redentialno": 10.1, "acctno": "0101", "credentialtype": ["1", "2"], "acnotp": "01"}
编码后的json是utf-8编码,对比可以看出细微的差别,以及元素类型的转换,具体细节可以在实际应用中尝试
代码如下:
import json;
dict = {"acnotp": '01','passwd': '223','acctno': '0101', 'redentialno': 10.1, 'credentialtype': ['1','2']};
print "Python:",repr(dict);
jsonstr = json.dumps(dict);
print "Json:",jsonstr;
json_python = json.loads(jsonstr);
print "Josn to Python:",json_python;
结果:
Python: {'passwd': '223', 'redentialno': 10.1, 'acctno': '0101', 'credentialtype': ['1', '2'], 'acnotp': '01'}
Json: {"passwd": "223", "redentialno": 10.1, "acctno": "0101", "credentialtype": ["1", "2"], "acnotp": "01"}
Josn to Python: {u'passwd': u'223', u'redentialno': 10.1, u'acctno': u'0101', u'credentialtype': [u'1', u'2'], u'acnotp': u'01'}
json.loads函数解码后会将原来的utf-8编码转为Unicode,u就是Unicode编码,如需转成其他格式,可以通过encode("gbk")或其他所需编码转换。
这里就简单介绍最基本也是应用最广泛的这两个方法,其他复杂方法和用法待后续深入了解后再更新。