Json模块

json全称JavaScript Object Notation,是一种java脚本兑现标记语言,已经成为一种简单的数据交换格式,通常用于序列化反序列化工作。

一、json的dumps方法与loads方法

  作用:主要操作内存中的数据

  1.json.dumps(数据):将数据转换成json字符串

  2.json.loads(json字符串):将json字符串转换为原来的数据

二、json的dump方法与load方法

  作用:常组合使用于文件操作中

  打开某一文件后-->1.json.dump(数据, 文件) 将数据先转换成json字符串再写入文件

           2.json.load(文件) 将文件中的json字符串读取出来并转换为原来的数据

  缺点:json操作文件通常是一次性写,一次性读。即在你打开某一文件到文件关闭之前,你只能写入一次或者读取一次

三、序列化:serialization

  将内存中的数据,转换成字节串 ,用以保存在文件或通过网络传输

import json


# json.dumps() 把指定的对象转换成json格式的字符串并返回
s = json.dumps([1, 2, 3])
print(s, type(s))  # '[1, 2, 3]'

s1 = json.dumps((1, 2, 3)) # 元组序列化后,其形式会变成列表
print(s1, type(s1))

s2 = json.dumps(10)
print(s2, type(s2))

s3 = json.dumps({'name':'David', 'age':20})
print(s3, type(s3))

# 可以将某一数据对象写到文件中
# with open('b.txt', encoding='utf-8', mode='a') as f:
#     json.dump([1, 2, 3, 4], f)

四、反序列化:deserialization

  从文件、网络中获取的数据,替换为内存中原来的数据类型

import json


res = json.dumps(100) # 把100变为json字符串
num = json.loads(res) # 原来数据类型
print(num, type(num))

# 从文件中反序列化
with open('b.txt', encoding='utf-8') as f:
    res = json.load(f)
    print(type(res))
    print(res)

五、如何解决dump方法与load方法在文件操作中的缺点

  思路:把需要序列化的数据对象,通过多次序列化的方式(可以理解为将对象拆分成多个小块),再用文件操作的write方法,将多次序列化之后的json字符串依次全部写入文件

1.多次序列化后写入文件

with open('json.txt', encoding='utf-8', mode='a') as f:
     f.write(json.dumps([1, 2]) + '
')
     f.write(json.dumps([3 ,4, 5]) + '
')

2.把分次序列化的json字符串,从文件中反序列化回来

with open('json.txt', encoding='utf-8', mode='rt') as f:
    for line in f:
        print(json.loads(line.strip()))

六、补充一些小知识点

l1 = [i for i in range(5)]

# l1 --> bytes
# b1 = l1.encode('utf-8')  # 不能直接转换

# 只有字符串才能和bytes相互转换
# 先转换成字符串再转换成bytes
b1 = str(l1).encode('utf-8')
print(b1, type(b1))

# 假如接收方接收到了 b1
# 需要先以相应的编码格式对b1进行解码
s2 = b1.decode('utf-8')
print(s2, type(s2))



dic = {'name':'lgq', 'age':22, 'stats':True}

import json
# 将dic转换成特殊的字符串
s3 = json.dumps(dic, ensure_ascii=False)
print(s3, type(s3))
# 再转换回去
dic1 = json.loads(s3)
print(dic1, type(dic1))

七、小结

json主要用于序列化和反序列化

缺点:不安全;不适用于set数据类型

原文地址:https://www.cnblogs.com/GOD-L/p/13435057.html