JSON模块

来源:互联网 发布:中山大学网络教育2017 编辑:程序博客网 时间:2024/06/05 14:07

简介:

在数据传递方面,XML是一种选择,还有一种选择是JSON,它是一种轻量级的数据交换格式。

在json的编码过程中,会存在从python原始类型向json类型的转化过程,具体的转化对照如下:

这里写图片描述

python标准库中有JSON模块,主要执行序列化和反序列化的功能:

  • 序列化 dumps() :encoding,把一个python队形编码转化成JSON字符串,JSON字符串是字符串
  • 反序列化 loads() :decoding,把JSON格式字符串解码转换为python数据对象,即为字典对象

注意 :JSON在python中分别由list和dict组成。


dumps()

dumps函数的功能:转换为字符串的格式

语法格式:

dumps(data, sort_keys = True, indent = 2)

其中,sort_keys = True 意思是按照键的字典顺序排序,indent = 2是让每个键/值对显示的时候,以缩进两个字符对齐

例子:

>>> import json>>> data = [{"name":"xiaoxu","lang":("python","english"),"age":40}]>>> data_json = json.dumps(data)>>> print data_json[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]>>>>>>>>> data_j = json.dumps(data,sort_keys = True,indent =2)>>> print data_j[  {    "age": 40,    "lang": [      "python",      "english"    ],    "name": "xiaoxu"  }]>>>

注意:观察data和data_json有两点不同

  • lang的值从元组变成了列表。
  • 看如下结果
    >>> print data_json
    [{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]
    >>> type(data_json)
    <type 'str'>
    >>> type(data)
    <type 'list'>
    >>>

loads()

loads 函数的功能:转换为字典的格式

>>> import json>>>>>> print data_json[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]  #接上个代码的结果输出>>>>>> new_data = json.loads(data_json)>>> print new_data[{u'lang': [u'python', u'english'], u'age': 40, u'name': u'xiaoxu'}]>>>

注意:解码之后并没有将元组还原


若数据量太大,数据都读入内存,内存会爆满,可以通过一个 tempfile 模块来解决。

关于 tempfile 模块的应用:
若你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择。其他的应用程序是无法找到或打开这个文件的,因为它并没有引用文件系统表。用这个函数创建的临时文件,关闭后会自动删除。

例:

>>> import tempfile>>> data[{'lang': ('python', 'english'), 'age': 40, 'name': 'xiaoxu'}]>>>>>> f = tempfile.NamedTemporaryFile(mode = 'w+')>>> json.dump(data,f)>>> f.flush()>>> print open(f.name,"r").read()[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]

文件的读写

如果要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。

# Writing JSON datawith open('data.json', 'w') as f:    json.dump(data, f)# Reading data backwith open('data.json', 'r') as f:    data = json.load(f)

参考链接:http://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html

1 0
原创粉丝点击