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

cod*_*rex 99 serialization json deserialization json-deserialization json-serialization

我是JSON的新手.现在,我需要为我的Flash ActionScript 3.0使用JSON.所以我找到了一个用于JSON的库,我看到了术语"反序列化"和"序列化".他们的意思是什么?

ken*_*ytm 181

JSON是一种对字符串中的对象进行编码的格式.序列化意味着将对象转换为该字符串,反序列化是其反向操作.

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

说,你有一个对象

{foo: [1, 4, 7, 10], bar: "baz"}
Run Code Online (Sandbox Code Playgroud)

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

'{"foo":[1,4,7,10],"bar":"baz"}'
Run Code Online (Sandbox Code Playgroud)

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

  • 那么我们为什么不直接 ```"{foo: [1, 4, 7, 10], bar: "baz"}"``` (5认同)
  • @kennytm - 我正试图通过网络发送东西。无论我是使用二进制编码还是使用 json、xml 或 proto buf - 数据总是必须以字节为单位,然后才能通过网络发送。真的吗? (3认同)
  • @EnricoMariaDeAngelis JSON 属性必须用引号引起来。这是必要的 - 查看 wiki 上的第一个示例:https://en.wikipedia.org/wiki/JSON (3认同)
  • @Nirmal 是的。___ (2认同)
  • 我用来记住区别的助记符是“序列化将对象变成序列号” (2认同)

win*_*rrr 6

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

来自维基百科:序列化

Python范例

因此,例如在Python中,“序列化”除了将给定的数据结构(例如a dict)转换为其有效的JSON挂件外,什么也没有做。

因此,Python True将转换为JSON true,然后将字典本身封装在引号中。

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
#   }
# }
Run Code Online (Sandbox Code Playgroud)

您可以通过它们的布尔值轻松发现Python字典和JSON之间的区别:

  • PythonTrue/ False
  • JSONtrue/false

资料来源:realpython.com

  • 这应该是答案。 (2认同)