我曾经用JSON见过术语“反序列化”和“序列化”。它们是什么意思?
当前回答
序列化和反序列化
在数据存储上下文中,序列化(或序列化)是将数据结构或对象状态转换为可以存储(例如,在文件或内存缓冲区中)或传输(例如,通过网络连接链接)并稍后重建的格式的过程。[…] 相反的操作(从一系列字节中提取数据结构)是反序列化。
——wikipedia.org
JSON
JSON (JavaScript Object Notation) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other serializable values). It is a common data format with diverse uses in electronic data interchange, including that of web applications with servers. JSON is a language-independent data format. It was derived from JavaScript, but many modern programming languages include code to generate and parse JSON-format data. JSON filenames use the extension .json.
——wikipedia.org
使用Python解释
在Python中,序列化只是将给定的数据结构转换为有效的JSON挂坠(例如,Python的True将转换为JSON的True,字典本身将转换为字符串),反序列化反之亦然。
Python vs. JSON
您可以在并排比较中轻松发现Python和JSON表示之间的差异。例如,通过检查它们的布尔值。看看下面这两种情况下使用的基本类型:
Python | JSON |
---|---|
True |
true |
False |
false |
None |
null |
int , float |
number |
str (with single ' , double " and tripple """ quotes) |
string (only double " quotes) |
dict |
object |
list , tuple |
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.com, geeksforgeeks.org
其他回答
JSON是一种在字符串中编码对象的格式。序列化意味着将一个对象转换为该字符串,反序列化是它的逆操作(convert string -> object)。
在传输数据或将数据存储在文件中时,要求数据为字节字符串,但复杂对象很少采用这种格式。序列化可以将这些复杂的对象转换为字节字符串以供使用。在字节串传输之后,接收方必须从字节串中恢复原始对象。这就是所谓的反序列化。
比如说,你有一个对象:
{foo: [1, 4, 7, 10], bar: "baz"}
序列化成JSON会把它转换成一个字符串:
'{"foo":[1,4,7,10],"bar":"baz"}'
可以存储或通过电线发送到任何地方。然后,接收方可以反序列化此字符串以获得原始对象。{foo: [1,4,7,10], bar: "baz"}。
序列化和反序列化
在数据存储上下文中,序列化(或序列化)是将数据结构或对象状态转换为可以存储(例如,在文件或内存缓冲区中)或传输(例如,通过网络连接链接)并稍后重建的格式的过程。[…] 相反的操作(从一系列字节中提取数据结构)是反序列化。
——wikipedia.org
JSON
JSON (JavaScript Object Notation) is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays (or other serializable values). It is a common data format with diverse uses in electronic data interchange, including that of web applications with servers. JSON is a language-independent data format. It was derived from JavaScript, but many modern programming languages include code to generate and parse JSON-format data. JSON filenames use the extension .json.
——wikipedia.org
使用Python解释
在Python中,序列化只是将给定的数据结构转换为有效的JSON挂坠(例如,Python的True将转换为JSON的True,字典本身将转换为字符串),反序列化反之亦然。
Python vs. JSON
您可以在并排比较中轻松发现Python和JSON表示之间的差异。例如,通过检查它们的布尔值。看看下面这两种情况下使用的基本类型:
Python | JSON |
---|---|
True |
true |
False |
false |
None |
null |
int , float |
number |
str (with single ' , double " and tripple """ quotes) |
string (only double " quotes) |
dict |
object |
list , tuple |
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.com, geeksforgeeks.org
使用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 fqu。
使用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'}
推荐文章
- 如何在Typescript中解析JSON字符串
- 错误"Uncaught SyntaxError:意外的标记与JSON.parse"
- 从JSON生成Java类?
- 使用Jackson将Java对象转换为JSON
- Javascript对象Vs JSON
- 在Swift中将字典转换为JSON
- 如何使用新的PostgreSQL JSON数据类型中的字段进行查询?
- 将类实例序列化为JSON
- JSON和对象文字表示法的区别是什么?
- 是否有与XQuery/XPath等价的JSON ?
- 对bash脚本函数中定义的变量使用curl POST
- 从Json转换为类型数组列表<T>
- 任务不可序列化:java.io.NotSerializableException,当只对类而不是对象调用闭包外部的函数时
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- 打印JSON解析对象?