JSON中的反序列化和序列化是什么?
我已经看到了使用JSON的术语“反序列化”和“序列化”。它们是什么意思?JSON是一种将对象编码为字符串的格式表示将对象转换为该字符串,反序列化是其逆操作(转换字符串->对象) 在传输数据或将数据存储在文件中时,要求数据为字节字符串,但复杂对象很少采用这种格式。序列化可以将这些复杂对象转换为字节字符串以供此类使用。传输字节串后,接收器必须从字节串恢复原始对象。这就是所谓的反序列化 比如说,你有一个对象:JSON中的反序列化和序列化是什么?,json,serialization,deserialization,json-deserialization,json-serialization,Json,Serialization,Deserialization,Json Deserialization,Json Serialization,我已经看到了使用JSON的术语“反序列化”和“序列化”。它们是什么意思?JSON是一种将对象编码为字符串的格式表示将对象转换为该字符串,反序列化是其逆操作(转换字符串->对象) 在传输数据或将数据存储在文件中时,要求数据为字节字符串,但复杂对象很少采用这种格式。序列化可以将这些复杂对象转换为字节字符串以供此类使用。传输字节串后,接收器必须从字节串恢复原始对象。这就是所谓的反序列化 比如说,你有一个对象: {foo: [1, 4, 7, 10], bar: "baz"} 序列化为JSON会将其转
{foo: [1, 4, 7, 10], bar: "baz"}
序列化为JSON会将其转换为字符串:
'{"foo":[1,4,7,10],"bar":"baz"}'
可以储存或通过电线发送到任何地方。然后,接收方可以反序列化该字符串以返回原始对象<代码>{foo:[1,4,7,10],条:“baz”}
在数据存储上下文中,序列化(或序列化)是将数据结构或对象状态转换为可存储(例如,在文件或内存缓冲区中)或传输(例如,通过网络连接链路)并在以后重建的格式的过程。[…]相反的操作是从一系列字节中提取数据结构,即反序列化 在Python中,“序列化”只是将给定的数据结构(例如,
dict
)转换为其有效的JSON挂件(对象)
- Python的
将被转换为JSONsTrue
,然后字典本身将被封装在引号中True
- 通过Python字典和JSON的布尔值,您可以很容易地发现它们之间的差异:
- Python:
/True
False
- JSON:
/true
false
- Python:
- Python内置模块json是进行序列化的标准方法:
data = {
"president": {
"name": "Zaphod Beeblebrox",
"species": "Betelgeusian",
"male": True,
}
}
import json
json_data = json.dumps(data, indent=2) # serialize
restored_data = json.loads(json_data) # deserialize
# serialized json_data now looks like:
# {
# "president": {
# "name": "Zaphod Beeblebrox",
# "species": "Betelgeusian",
# "male": true
# }
# }
来源:使用Python进行序列化和反序列化的说明 在python中,pickle模块用于序列化。因此,序列化过程在Python中称为pickling。此模块在Python标准库中提供 使用pickle进行序列化
import pickle
#the object to serialize
example_dic={1:"6",2:"2",3:"f"}
#where the bytes after serializing end up at, wb stands for write byte
pickle_out=open("dict.pickle","wb")
#Time to dump
pickle.dump(example_dic,pickle_out)
#whatever you open, you must close
pickle_out.close()
import pickle
pickle_in=open("dict.pickle","rb")
get_deserialized_data_back=pickle.load(pickle_in)
print(get_deserialized_data_back)
PICKLE文件(可由记事本等文本编辑器打开)包含以下内容(序列化数据):
欧元}q(KX 6qKX 2qKX fqu
使用pickle进行反序列化
import pickle
#the object to serialize
example_dic={1:"6",2:"2",3:"f"}
#where the bytes after serializing end up at, wb stands for write byte
pickle_out=open("dict.pickle","wb")
#Time to dump
pickle.dump(example_dic,pickle_out)
#whatever you open, you must close
pickle_out.close()
import pickle
pickle_in=open("dict.pickle","rb")
get_deserialized_data_back=pickle.load(pickle_in)
print(get_deserialized_data_back)
输出:
{1:'6',2:'2',3:'f'}@kennytm-我正试图通过网络发送东西。无论我使用的是二进制编码还是json、xml或proto-buf-数据在通过网络发送之前都必须以字节为单位。这是真的吗?@Nirmal是的。uu我用来记住区别的一个助记设备是“序列化将对象转换为序列号”,那么我们为什么不干脆
“{foo:[1,4,7,10],bar:“baz”}"
@EnricoMariaDeAngelis JSON属性必须用引号括起来。这是必要的-查看wiki上的第一个示例:用户询问的是JSON而不是pickle。这有点离题。这是原始问题:JSON中的反序列化和序列化是什么?我使用Python的pickle模块来演示这个想法。我使用了一个工具来解释在一个想法中。你更关注工具而不是想法。这回答了你的问题吗?这应该是答案。