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会将其转

我已经看到了使用JSON的术语“反序列化”和“序列化”。它们是什么意思?

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的
    True
    将被转换为JSONs
    True
    ,然后字典本身将被封装在引号中
  • 通过Python字典和JSON的布尔值,您可以很容易地发现它们之间的差异:
    • Python
      True
      /
      False
    • JSON
      true
      /
      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
#   }
# }

来源:

使用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模块来演示这个想法。我使用了一个工具来解释在一个想法中。你更关注工具而不是想法。这回答了你的问题吗?这应该是答案。