一 前言
最近始终在做开发相干的工作 – 基于 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 从新反序列化为 dict
json.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]: dict
In [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 技术大本营,获取更多技能与教程。