Python json.dump和json.dumps的区别

Python json.dump和json.dumps的区别

Python json.dump和json.dumps的区别

1. json.dump()

json.dump()是Python的JSON模块中的方法之一,用于将Python对象转换为JSON格式的字符串,并将其写入文件或可写对象中。下面是json.dump()方法的语法:

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, **kw)

该方法接受以下参数:

  • obj:要进行JSON编码的Python对象。
  • fp:写入文件中的文件对象或可写对象。
  • skipkeys:如果设置为True,字典键不是基本类型(str、int、float、bool、None)时,将被忽略而不是引发TypeError,默认为False。
  • ensure_ascii:如果为True(默认值),则所有非ASCII字符将被转义为Unicode序列,如果为False,则不会转义。
  • check_circular:如果为False(默认值),则不检查循环引用(例如,一个对象引用自身),如果为True,则在进行编码时检查循环引用。
  • allow_nan:如果为True(默认值),则允许JSON编码中的NaN、Infinity和-Infinity。如果为False,则会引发ValueError。
  • cls:用于自定义编码的JSONEncoder子类。
  • indent:如果指定为非负整数,则生成的JSON字符串将包含缩进和换行符,用于更易于阅读的格式化。可指定缩进类型(如空格数或制表符)。
  • separators:包含的元组指定单个项之间的分隔符和对象和键之间的分隔符,如(",", ":")。
  • default:一个函数,用于将非JSON可序列化类型转换为JSON序列化类型。
  • sort_keys:如果为True(默认False),则字典键将按照它们在哈希表中的顺序进行排序。

下面是一个使用json.dump()的示例代码:

import json

data = {'name': 'John', 'age': 30, 'city': 'New York'}
with open('data.json', 'w') as f:
    json.dump(data, f, indent=4)

print("JSON data is written to file")

运行这段代码后,文件data.json将被创建并写入JSON格式的字符串:

{
    "name": "John",
    "age": 30,
    "city": "New York"
}

2. json.dumps()

json.dumps()也是Python的JSON模块中的方法之一,与json.dump()类似,用于将Python对象转换为JSON格式的字符串。不同之处在于,json.dumps()返回一个字符串,而不是将其写入文件或可写对象。下面是json.dumps()方法的语法:

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, **kw)

json.dumps()的参数与json.dump()相同,仅缺少fp参数。下面是一个使用json.dumps()的示例代码:

import json

data = {'name': 'John', 'age': 30, 'city': 'New York'}
json_string = json.dumps(data, indent=4)

print(json_string)

运行这段代码后,输出结果将是一个格式化的JSON字符串:

{
    "name": "John",
    "age": 30,
    "city": "New York"
}

3. json.load()

json.load()是Python的JSON模块中的方法之一,用于从文件或可读对象中加载JSON数据,并将其解析为Python对象。下面是json.load()方法的语法:

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

json.load()接受以下参数:

  • fp:读取JSON数据的文件对象或可读对象。
  • cls:用于自定义解码的JSONDecoder子类。
  • object_hook:用于将JSON对象转换为Python对象的函数。
  • parse_float:用于将JSON浮点值转换为Python浮点值的函数。
  • parse_int:用于将JSON整数值转换为Python整数值的函数。
  • parse_constant:使用此函数将特殊的JSON常量(如NaN)转换为Python类型。
  • object_pairs_hook:用于将JSON对象转换为Python对象的函数。

下面是一个使用json.load()的示例代码:

import json

with open('data.json', 'r') as f:
    data = json.load(f)

print(data)

假设文件data.json中包含以下JSON数据:

{
    "name": "John",
    "age": 30,
    "city": "New York"
}

该代码将读取文件中的JSON数据,并将其解析为Python对象。然后,数据将被打印出来:

{'name': 'John', 'age': 30, 'city': 'New York'}

4. json.loads()

json.loads()是Python的JSON模块中的方法之一,与json.load()类似,用于将JSON格式的字符串解析为Python对象。不同之处在于,json.loads()接受的参数是一个字符串,而不是文件对象或可读对象。下面是json.loads()方法的语法:

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

json.loads()的参数与json.load()相同,只是将fp换成了s,表示要解析的JSON字符串。下面是一个使用json.loads()的示例代码:

import json

json_string = '''
{
    "name": "John",
    "age": 30,
    "city": "New York"
}
'''

data = json.loads(json_string)
print(data)

运行这段代码后,输出结果将是一个Python对象:

{'name': 'John', 'age': 30, 'city': 'New York'}

当然,如果JSON格式的字符串不正确,或者其中包含无法解析的内容,将引发json.JSONDecodeError异常。

综上所述,json.dump()json.dumps()的区别在于,前者将Python对象写入文件或可写对象中,而后者将Python对象转换为JSON格式的字符串并返回。同样,json.load()json.loads()的区别在于,前者将JSON数据从文件或可读对象中加载并解析为Python对象,而后者将JSON格式的字符串解析为Python对象。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程