python中json序列化的东东
之所以写这个因为自己总是弄混了,容易弄错,记下来有事没事看看
序列化是指把变量从内存中变成可存储或传输的过程称之为序列化用(使用dump或者dumps),把变量内容从序列化的对象重新读到
内存里称之为反序列化(使用load或者loads)
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON
表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,
而且可以直接在Web页面中读取,非常方便
JSON和Python内置的数据类型对应如下:
dumps()方法返回一个str,内容就是标准的JSON。类似的,dump()方法可以直接把JSON写入一个file_Object。要把JSON反序列化为
Python对象,用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file_Object中读取字符串并反序列化
实例
dumps序列化一个对象
data= { "广州市": { "番禺区": ["南村镇", "大石镇", "榄核镇"], "天河区": ["广州塔", "中信广场", "天河又一城"] } }
s = json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)
print(s)
#dumps:序列化一个对象 sort_keys:根据key排序 indent:以4个空格缩进,输出阅读友好型 ensure_ascii: 可以序列化非ascii码(中文等)
dump:将一个对象序列化存入文件
dump()的第一个参数是要序列化的对象,第二个参数是打开的文件句柄 注意打开文件时加上以UTF-8编码打开
with open("data.json", "w", encoding="UTF-8") as f:
s = json.dump(data, f, ensure_ascii=False)
运行此文件之后在统计目录下会有一个data.json文件
反序列化
load:从一个打开的文件句柄加载数据,注意打开的文件编码
with open("data.json", "r", encoding="UTF-8") as f:
r = json.load(f)
print(r)
loads: 从一个对象加载数据
a = json.loads(data)
print(a)
不加ensure_ascii=False 结果是
加入ensure_ascii=False
a = json.loads(data,ensure_ascii=False) 要注意
print(a)
a=json.loads(input("请输入添加的数据:"),enconding='utf-8')
print(a)
路漫漫其修远兮,吾将迷途而知返