欢迎访问宙启技术站
智能推送

Python的json函数帮助你更好地序列化和反序列化JSON数据

发布时间:2023-06-11 19:40:09

Python作为一种高级编程语言,被广泛认为是最好的数据处理语言之一。Python有许多模块可用于处理不同类型的数据,其中之一是json模块。JSON是现代Web应用程序中使用的最常见数据格式之一。这里我们将向您介绍Python的json模块,以帮助您更好地序列化和反序列化JSON数据。

什么是JSON?

JSON代表JavaScript Object Notation。它是一种轻量级数据交换格式。JSON格式的数据易于阅读和编写,并且可以在网络上进行快速和简单的传输。JSON的原始设计目的是将结构化数据嵌入到JavaScript中。JSON使用推荐的Unicode字符集来表示JavaScript中的字符串数据类型。JSON是自描述的格式,这意味着它在存储或传输时可以包含足够的信息来描述自身的结构。

Python的json模块

Python的json模块提供了一种用于序列化和反序列化JSON数据的标准方式。它提供了4个函数,用于将Python对象序列化为JSON格式并将JSON格式反序列化为Python对象。

json.dump(obj,fp,*,skipkeys = False,ensure_ascii = True,check_circular = True,allow_nan = True,cls = None,indent = None,separators = None,default = None,sort_keys = False,** kwargs )

该函数将Python对象解析为JSON字符串,并将其写入文件流(fp)中。在序列化期间,如果发现任何无法转换为JSON的的Python对象,则它将引发TypeError。但是,如果 skipkeys=True,则会跳过无法转换的对象而不会引发TypeError。下面是函数的参数列表:

obj - 要序列化的Python对象(必需)。

FP - 文件流(必需)。

skipkeys - 如果为True,则跳过无法转换为JSON的对象。否则,会引发TypeError(默认为False)。

ensure_ascii - 如果为True,则将所有非ASCII字符转义为\uXXXX序列。否则,不进行转义(默认为True)。

check_circular - 如果为True,则在发现循环引用时引发TypeError。否则,将在序列化期间忽略循环引用(默认为True)。

allow_nan - 如果为False,则将JSON数字中的NaN和Infinity解析为TypeError。否则,将它们解析为常规Python float对象(默认为True)。

cls - 用于序列化的可选类(默认为None)。

indent - 如果提供,则使用它为每个层级设置缩进(默认为None)。

separators - 可选元组(item_separator,key_separator),指定项目和键值之间使用哪些字符进行分隔(默认为(“,”,“:”))。

default - 如果提供,它应该是一个处理不支持序列化Python对象的函数。

sort_keys - 如果为True,则按字母顺序对生成的键排序(默认为False)。

kwargs - 其他参数。

json.dumps(obj,*,skipkeys = False,ensure_ascii = True,check_circular = True,allow_nan = True,cls = None,indent = None,separators = None,default = None,sort_keys = False,** kwargs )

该函数将Python对象序列化为JSON格式的字符串。下面是该函数的参数列表:

obj - 要序列化的Python对象(必需)。

skipkeys - 如果为True,则跳过无法转换为JSON的对象。否则,会引发TypeError(默认为False)。

ensure_ascii - 如果为True,则将所有非ASCII字符转义为\uXXXX序列。否则,不进行转义(默认为True)。

check_circular - 如果为True,则在发现循环引用时引发TypeError。否则,将在序列化期间忽略循环引用(默认为True)。

allow_nan - 如果为False,则将JSON数字中的NaN和Infinity解析为TypeError。否则,将它们解析为常规Python float对象(默认为True)。

cls - 用于序列化的可选类(默认为None)。

indent - 如果提供,则使用它为每个层级设置缩进(默认为None)。

separators - 可选元组(item_separator,key_separator),指定项目和键值之间使用哪些字符进行分隔(默认为(“,”,“:”))。

default - 如果提供,它应该是一个处理不支持序列化Python对象的函数。

sort_keys - 如果为True,则按字母顺序对生成的键排序(默认为False)。

kwargs - 其他参数。

json.load(fp,*,cls = None,object_hook = None,parse_float = None,parse_int = None,parse_constant = None,object_pairs_hook = None,** kwargs )

该函数从文件流(fp)读取JSON数据并将其解析为Python对象。如果在解析期间发现无效数据,则json.decoder.JSONDecodeError将被引发。下面是该函数的参数列表:

fp - 文件流(必需)。

cls - 用于加载的可选类(默认为None)。

object_hook - 如果指定,则为所有对象实例调用,用于转换集合为Python对象。

parse_float - 如果指定,则将此函数用于将所有浮点值转换为Python对象。默认为float。

parse_int - 如果指定,则将此函数用于将所有整数值转换为Python对象。默认为int。

parse_constant - 如果指定,则将此函数用于将以下常量名称解析为相应的常量值:true,false,null。否则,将在使用Python true,false和None时进行解析。

object_pairs_hook - 如果指定,则调用此函数以将所有对象对转换为Python对象。

kwargs - 其他参数。

json.loads(s,*,cls = None,object_hook = None,parse_float = None,parse_int = None,parse_constant = None,object_pairs_hook = None,** kwargs )

该函数将JSON字符串解析为Python对象。如果在解析期间发现无效数据,则json.decoder.JSONDecodeError将被引发。下面是该函数的参数列表:

s - 要解析的JSON字符串(必需)。

cls - 用于加载的可选类(默认为None)。

object_hook - 如果指定,则为所有对象实例调用,用于转换集合为Python对象。

parse_float - 如果指定,则将此函数用于将所有浮点值转换为Python对象。默认为float。

parse_int - 如果指定,则将此函数用于将所有整数值转换为Python对象。默认为int。

parse_constant - 如果指定,则将此函数用于将以下常量名称解析为相应的常量值:true,false,null。否则,将在使用Python true,false和None时进行解析。

object_pairs_hook - 如果指定,则调用此函数以将所有对象对转换为Python对象。

kwargs - 其他参数。

在Python中使用JSON

Python中的JSON是通过字典和列表表示的。字典表示对象(在JSON中称为“object”),列表表示数组(在JSON中称为“array”)。可以使用json.dumps()将Python对象转换为JSON格式的字符串:

import json

person = {"name": "Peter", "age": 30, "city": "London"}

json_string = json.dumps(person)

print(json_string)

输出如下:

{"name": "Peter", "age": 30, "city": "London"}

您还可以将从JSON字符串反序列化的Python对象打印出来:

import json

json_string = '{"name": "Peter", "age": 30, "city": "London"}'

person = json.loads(json_string)

print(person["name"])

print(person["age"])

print(person["city"])

输出如下:

Peter

30

London

结论

Python的json模块是将Python对象序列化为JSON格式字符串并将JSON字符串反序列化为Python对象的最佳方式。json.dump和json.dumps函数序列化Python对象为JSON格式字符串,json.load和json.loads函数将JSON格式字符串反序列化为Python对象。使用json模块可以