JSON模块

简介:

在数据传递方面,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 data
with open('data.json', 'w') as f:
    json.dump(data, f)

# Reading data back
with 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
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值