序列化

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling.

 

json模块

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为json,因为json表示出来就是一个字符串,可以被所有语言读取,也可以方便的存储到磁盘或者通过网络传输。json不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

 

数据类型对应

json表示的对象就是标准的Javascript语言的对象,jsonPython对象转换过程中,数据类型不完全一致,有对应。json和python内置的数据类型对应如下:

Python Json
dict 字典 object   对象类
list,tuple 列表、元组 array   数组类
str, unicode  字符串、Unicode编码 string   字符串类
int,long,float  整型、长整型、浮点型 number   数字类
True   布尔值真 true   布尔值真
False   布尔值假 false  布尔值假
None  空值 null   空值

使用 JSON 函数需要导入 json 库:import json

函数 描述
json.dumps 将 Python 对象编码成 JSON 字符串
json.loads 将已编码的 JSON 字符串解码为 Python 对象

python基础(json模块)

json使用注意点

json中的字符串都是双引号引起来的,如果不是双引号

  • eval:能实现简单的字符串和python类型的转化
  • replace:把单引号替换为双引号

往一个文件中写入多个json串,不再是一个json串,不能直接读取

一行写一个json串,按照行来读取

 

json.dumps

json.dumps 用于将 Python 对象编码成 JSON 字符串。

语法

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

ensure_ascii=False 解决中文不能显示的问题, indent=4 格式化写入

实例

以下实例将数组编码为 JSON 格式数据:

import json

data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

json = json.dumps(data)

print json

以上代码执行结果为:

[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]

使用参数让 JSON 数据格式化输出:

>>> import json
>>> print json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
{
    "a": "Runoob",
    "b": 7
}

json.dump

# json.dump能够把python类型放入类文件对象中

with open('douban1.json', 'w', encoding='utf-8') as f:

      json.dump(dict, f, ensure_ascii=False, indent=4)

 

json.loads

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。

语法

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

ensure_ascii=False 解决中文不能显示的问题, indent=4 格式化写入

实例

以下实例展示了Python 如何解码 JSON 对象:

import json

jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

text = json.loads(jsonData)

print text

以上代码执行结果为:

{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}

json.load

# 使用json.load提取类文件对象中的数据

with open('douban.json', 'r', encoding='utf-8') as f:

     load_data = json.load(f)

     print(load_data)

     print(type(load_data))   # <class 'dict'>

相关文章: