Python中的序列化模块json

1、json简介:

定义:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。特点:简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2、json数据格式:

在 JS 语言中,一切都是对象。任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:  对象表示为键值对{"name":"king","age":18}  数据由逗号分隔{"name":"king","age":18}  花括号保存对象{"name":"king","age":18}  方括号保存数组[{"name":"king","age":18},{"name":"king","age":18}]

3、json序列化数据的注意事项:

A、两种语言之间数据类型的差异,用json交换。

B、外层必须是字典或列表这两个容器类数据类型。

C、必须是双引号(因为java等其它语言有使用双引号表示字符串,单引号不表示字符串)。

D、数据类型序列化说明:json是字符串形式,json中不存在元组, tuple元祖序列化之后变列表;set集合不能用来序列化,序列化集合报错,所以通常序列化针对字典或列表。

4、序列化与反序列化:1)、序列化简单定义:数据对象变成json格式。

语法:

importjson

dumps()

描述:将Python中的数据序列化,变成json字符串。

语法:strjson.dumps(Objectobj)

举例:

importjson

list1=[100,200,"king"]

str1=json.dumps(list1)#序列化

print(type(str1),str1)# [100, 200, "king"]

序列化集合报错

importjson

mset={1,2,3}#不能是集合,序列化集合报错。

print(json.dumps(mset))#TypeError: Object of type 'set' is not JSON serializable

2)、反序列化简单定义:json格式变其它

语法:

loads()

描述:将json字符串格式还原为python数据类型格式。

语法:Objectjson.loads(strjson)

举例:

importjson

str1='{"name":"king","age":18}';#json必须为双引号

data=json.loads(str1)#反序列化

print(type(data),data)# {'name': 'king'}

3)、序列化列表、元组、字典举例

importjson

#1、序列化列表

list1=[100,200,"king"]

str1=json.dumps(list1)#序列化

print(type(str1),str1)# [100, 200, "king"]

data=json.loads(str1)#反序列化

print(type(data),data)# {'name': 'king', 'age': 18}

#2、序列化字典

dict1= {"name":"king","age":18}

str2=json.dumps(dict1)#序列化

print(type(str2),str2)# {"name": "king", "age": 18}

data=json.loads(str2)#反序列化

print(type(data),data)# {'name': 'king', 'age': 18}

#3、序列化元祖

tup=(1,2,3)

str3=json.dumps(tup)#json中不存在元组。序列化元组之后元组变列表

print(type(str3),str3)# [1, 2, 3]

data=json.loads(str3)# 反序列化元组

print(type(data),data)# [1, 2, 3]

# 4、序列化集合

# import json

# mset= #不能是集合,序列化集合报错。

# print(json.dumps(mset)) #TypeError: Object of type 'set' is not JSON serializable

4)、序列化中文显示

import

v= {'k1':'alex','k2':'魔降风云变'}

str5=json.dumps(v)

print(type(str5),str5)# {"k1": "alex", "k2": "\u9b54\u964d\u98ce\u4e91\u53d8"}

val=json.dumps(v,ensure_ascii=False)

print(val)

5、基本类型的序列化与反序列化

importjson

# 1、字符串序列化与反序列化:

somestr="xiaoma"

str=json.dumps(somestr)#序列化

print(type(str),str)# "xiaoma"

object=json.loads(str)#反序列化

print(type(object),object)# xiaoma

# 2、整型序列化与反序列化

someint=2

str=json.dumps(someint)#序列化

print(type(str),str)# 2

object=json.loads(str)#反序列化

print(type(object),object)# 2

# 3、浮点型序列化与反序列化

somefloat=2.03

str=json.dumps(somefloat)#序列化

print(type(str),str)# 2.03

object=json.loads(str)#反序列化

print(type(object),object)# 2.03

# 4、布尔型序列化与反序列化:

somebool=True

str=json.dumps(somebool)#序列化

print(type(str),str)# true

object=json.loads(str)#反序列化

print(type(object),object)# True

# 5、None序列化与反序列化

importjson

someNone=None

str=json.dumps(someNone)#序列化

print(type(str),str)# null

object=json.loads(str)#反序列化

print(type(object),object)# None

注意:

python的None在json中为null

python的True在json中true

5、json.dump和json.load

语法:

A、序列化并写入文件:

语法:

dump()

描述:将python数据类型序列化为json字符形式并写入文件。

语法:Nonejson.dump(Object,file)

B、从文件读取并反序列化:

load()

描述:从文件中读取json字符串转为python数据类型。

语法:Objectjson.load(file)

举例:

A、序列化并写入文件:

importjson

v= {'k1':'yh','k2':'小马过河'}

f=open('xiaoma.txt',mode='w',encoding='utf-8')#文件不存在就会生成

val=json.dump(v,f)

print(val)#None

f.close()

B、从文件读取并反序列化:

importjson

f=open('xiaoma.txt',mode='r',encoding='utf-8')

data=json.load(f)

f.close()

print(type(data),data)# {'k1': 'yh', 'k2': '小马过河'}

关注最编程,懂编程,更懂世界!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191231A0LD7W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券