一 前言
最近始终在做开发相干的工作--基于Django的web 平台,其中须要从model层传输数据到view 层做数据展现或者做业务逻辑解决。咱们采纳通用的Json格局--Json(JavaScript Object Notation) 是一种轻量级的数据交换格局,易于浏览和程序解析。
二 意识Json
2.1 Json 构造
常见的Json格局为 “名称/值”对的汇合,其中 值能够是对象,列表,字典,字符串等等。比方
backup_data = {"back_to_host": "dbbk0",
"ip_address": "10.10.20.3", "host_name": "rac4", "port": 3306}
2.2 应用Json
Python的Json模块序列化与反序列化的过程别离是 编码和解码。这两个过程波及到两组不同的函数
编码 把一个Python对象编码转换成Json字符串,json.dumps(data)/json.dump(data,file_handler)
解码 把Json格局字符串解码转换成Python对象,json.loads(data)/json.load(file_handler)
在python中要应用Json模块做相干操作,必须先导入:
import Json
2.3 次要函数
编码函数次要有 json.dumps(data)/json.dump(data,file_handler)
json.dumps()的参数是将python对象转换为字符串,如应用json.dumps序列化的对象json_dumps=json.dumps({'a':1, 'b':2}) ,json_dumps='{"b": 2, "a": 1}'
json.dump 是将内置类型序列化为json对象后写入文件。
解码函数次要由json.loads(data)/json.load(file_handler)
json.loads的参数是内存对象,把Json格局字符串解码转换成Python对象,json_loads=json.loads(d_json) #{ b": 2, "a": 1},应用load从新反序列化为dictjson.load()的参数针对文件句柄,比方本地有一个文件/tmp/test.json json_load=json.load(open('/tmp/test.json'))
具体案例参考如下:
In [3]: data={"back_to_host": "rac1", ...: "ip_address": "10.215.20.3", ...: "host_name": "rac3", ...: "port": 3306}In [7]: json_str=json.dumps(data)In [8]: print json_str{"ip_address": "10.215.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}In [9]: json_loads=json.load(json_str)---------------------------------------------------------------------------AttributeError Traceback (most recent call last)<ipython-input-9-180506f16431> in <module>()----> 1 json_loads=json.load(json_str)/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc in load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 284 285 ""
留神 从下面的报错信息来看 json.loads 传参是字符串类型,并不是文件句柄,没有 read()属性。
In [10]: json_loads=json.loads(json_str)In [11]: print json_loads{u'back_to_host': u'rac1', u'ip_address': u'10.215.20.3', u'host_name': u'rac3', u'port': 3306}In [12]: type(json_loads)Out[12]: dictIn [13]: type(json_str)Out[13]: str
利用dump 将数据写入 dump.json
In [17]: with open('/tmp/dump.json','w') as f: ...: json.dump(json_str,f) ...:yangyiDBA:~ yangyi$ cat /tmp/dump.json"{\"ip_address\": \"10.10.20.3\", \"back_to_host\": \"rac1\", \"host_name\": \"rac3\", \"port\": 3306}"yangyiDBA:~ yangyi$
利用json.load 将dump.sjon的数据读出来并赋值给 data
In [18]: with open('/tmp/dump.json','r') as f: ...: data=json.load(f) ...:In [19]: print data{"ip_address": "10.10.20.3", "back_to_host": "rac1", "host_name": "rac3", "port": 3306}
三 小结
本文算是一篇学习笔记,次要比照了json.loads/json.load , json.dumps/ json.dump 的应用差别 ,不便当前更好的应用json 。
以上就是本次分享的全部内容,当初想要学习编程的小伙伴欢送关注Python技术大本营,获取更多技能与教程。