什么是JSON中的反序列化和序列化?


Answers:


228

JSON是一种将对象编码为字符串的格式。序列化意味着将一个对象转换为该字符串反序列化是其反向操作(转换字符串-> object)

传输数据或将其存储在文件中时,数据必须是字节字符串,但是很少有这种格式的复杂对象。序列化可以将这些复杂的对象转换为字节字符串以供此类使用。字节串发送后,接收方将不得不从字节串中恢复原始对象。这称为反序列化。

说,您有一个对象:

{foo: [1, 4, 7, 10], bar: "baz"}

序列化为JSON会将其转换为字符串:

'{"foo":[1,4,7,10],"bar":"baz"}'

可以存储或通过电线发送到任何地方。然后,接收者可以反序列化此字符串以返回原始对象。{foo: [1, 4, 7, 10], bar: "baz"}


3
@kennytm-我想把头放在电线上。无论我使用二进制编码还是使用json,xml或proto buf,数据始终必须以字节为单位,然后才能通过网络发送。真的吗?
Nirmal

1
@Nirmal是的。___
kennytm

1
我用来记住区别的助记符设备是“串行化将对象转换为序列号”
Janac Meena

1
那么,我们为什么不做"{foo: [1, 4, 7, 10], bar: "baz"}"
呢-panoet

2
@EnricoMariaDeAngelis JSON属性必须用引号引起来。这是必要的-在Wiki上查看第一个示例:en.wikipedia.org/wiki/JSON
Cloud

8

在数据存储的上下文中,序列化(或序列化)是将数据结构或对象状态转换为可以存储(例如,在文件或内存缓冲区中)或传输(例如,通过网络连接)的格式的过程链接),并在以后进行重建。[...]
的相反的操作,从一系列的字节中提取的数据结构,是反序列化来自维基百科

在Python中,“序列化”除了将给定的数据结构(例如a dict)转换为有效的JSON吊坠(对象)外,什么也不做。

  • Python True将转换为JSON true,然后将字典本身封装在引号中。
  • 您可以通过它们的布尔值轻松发现Python字典和JSON之间的区别:
    • PythonTrue/ False
    • JSONtrue/false
  • 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
#   }
# }

资料来源:realpython.com


-3

使用Python进行序列化和反序列化的说明

在python中,pickle模块用于序列化。因此,序列化过程在Python中称为酸洗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()

PICKLE文件(可以通过记事本之类的文本编辑器打开)包含以下内容(序列化数据):

€} q(KX 6qKX 2qKX fqu。

用泡菜反序列化

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”}


4
但是,用户询问有关JSON的消息不是“腌制”。这有点题外话。
smci

这是原始问题:JSON中的反序列化和序列化是什么?我使用Python的pickle模块演示了这个想法。我用一种工具来解释一个想法。您将重点放在工具上,而不是构思上。
阿西夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.