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

pkwftd7m  于 2023-02-14  发布在  其他
关注(0)|答案(4)|浏览(300)

我见过JSON中的术语“反序列化”和“序列化”,它们是什么意思?

ny6fqffe

ny6fqffe1#

JSON是一种将对象编码为字符串的格式。Serialization表示将对象转换为字符串,而反序列化是其逆操作(转换字符串-〉对象)
在传输数据或将其存储到文件中时,要求数据是字节串,但复杂对象很少采用这种格式,串行化可以将这些复杂对象转换为字节串以供此类使用,字节串传输后,接收方将不得不从字节串中恢复原始对象,这称为反序列化。
比如说,你有一个对象:

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

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

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

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

qv7cva1a

qv7cva1a2#

序列化和反序列化

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

JSON

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种开放标准文件格式和数据交换格式,它使用人类可读文本来存储和传输由属性值对和数组(或其他可序列化值)组成的数据对象。JSON是一种常见的数据格式,在电子数据交换中有多种用途,包括Web应用程序与服务器之间的数据交换。
JSON是一种独立于语言的数据格式。它源于JavaScript,但许多现代编程语言都包含生成和解析JSON格式数据的代码。JSON文件名使用扩展名. json。

使用Python解释

在Python中,serialization只不过是将给定的数据结构转换成它的有效JSON挂件(例如,Python的True将被转换成JSON的true,而字典本身将被转换成字符串),对于deserialization来说,反之亦然。

Python与JSON

通过并排比较,你可以很容易地发现Python和JSON表示之间的差异,例如,通过检查它们的布尔值,看看下表中两种上下文中使用的基本类型:
| * * 巨蟒**|* * JSON格式**|
| - ------|- ------|
| True|true|
| False|false|
| None|null|
| intfloat|number|
| str(带有单引号'、双引号"和三引号""")|string(仅限双"引号)|
| dict|object|
| x1米19英寸1x,x1米20英寸1x|array|

代码示例

Python内置模块json是进行序列化和反序列化的标准方法:

import json

data = {
    'president': {
        "name": """Mr. Presidente""",
        "male": True,
        'age': 60,
        'wife': None,
        'cars': ('BMW', "Audi")
    }
}

# serialize
json_data = json.dumps(data, indent=2)

print(json_data)
# {
#   "president": {
#     "name": "Mr. Presidente",
#     "male": true,
#     "age": 60,
#     "wife": null,
#     "cars": [
#       "BMW",
#       "Audi"
#     ]
#   }
# }

# deserialize
restored_data = json.loads(json_data) # deserialize

来源:realpython.comgeeksforgeeks.org

8i9zcol2

8i9zcol23#

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

在Python中,pickle模块用于序列化。因此,序列化过程在Python中称为pickle。该模块在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平方英尺)

    • 使用pickle进行反序列化**
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 "}

ldxq2e6h

ldxq2e6h4#

分享我对这个主题的了解。

什么是序列化

Serialization是将数据对象转换为byte stream的过程。

什么是字节流

Byte stream只是一个二进制数据流,因为只有二进制数据可以存储或传输。

什么是字节串与字节流

有时候大家也会用到byte string这个词,字节的字符串编码叫做byte strings,那么它就可以解释什么是JSON了。

JSON和序列化之间的关系是什么

JSON是一种表示字节数据的字符串格式。JSON是用UTF-8编码的。因此,当我们看到人类可读的字符串时,在幕后字符串是用UTF-8编码为字节的。

相关问题