json的序列化与反序列化

json 是一种轻量级的数据交换格式,也是完全独立于任何程序语言的文本格式。

本文介绍json字符串的序列化与反序列化问题。

  • 序列化 是指将变量(对象)从内存中变成可存储或可传输的过程。
  • 反序列化 是指将变量内容从序列化的对象重新读到内存里的过程。

1、在json模块中,dump()dumps() 都实现了序列化。

dump():将dict对象序列化到文件中(文件中存储json字符串)。

import json

a_dict = {'a': 11, 'b': 22}
a_str = json.dump(a_dict, open('demo.json', 'w'))

dumps():将dict对象序列化为json字符串,仍在内存中。

import json

a_dict = {'a': 11, 'b': 22}
a_str = json.dumps(a_dict)
print(type(a_dict))  # <class 'dict'>
print(type(a_str))  # <class 'str'>

2、在json模块中,load()loads() 都实现反序列化。

load():针对文件句柄,从文件中读取json字符转换为dict

import json

a_json = json.load(open('demo.json', 'r'))
print(type(a_json))  # <class 'dict'>
print(a_json)  # {'a': 11, 'b': 22}

loads():针对内存对象,将json字符串转换为dict

import json

a_str = '{"a": 11, "b": 22}'
a_json = json.loads(a_str)
print(type(a_json))  # <class 'dict'>
print(a_json)  # {'a': 11, 'b': 22}

注意:json字符串的key为单引号时,用json.loads()会报错。

a_str = "{'a': 11, 'b': 22}"
a_json = json.loads(a_str)

# json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)


(0)

相关推荐