写点什么

python 中 json 序列化汇总

作者:ModStart
  • 2023-01-12
    陕西
  • 本文字数:766 字

    阅读完需:约 3 分钟

在 Python 中,可以使用 json 模块中的 dumps 函数将一个字典转换为 JSON 字符串。

示例代码

import jsondata = {    "name": "John Smith",    "age": 30,    "city": "New York"}json_data = json.dumps(data)print(json_data)
复制代码


输出结果

{"name": "John Smith", "age": 30, "city": "New York"}
复制代码


在 Python 中,字典的键必须是字符串类型,如果使用了其他类型的键,dumps 函数会抛出 TypeError 异常。

如果在调用 json.dumps 函数时提示 “TypeError: Object of type xxx is not JSON serializable”,表示传入的对象中包含了不能被序列化为 JSON 类型的对象。 这通常发生在传入的对象中包含了 Python 内置类型之外的自定义对象,比如函数、模块等。

如代码

import json
def greet(name): return "Hello, " + name
data = { "name": "John Smith", "greet": greet}
json_data = json.dumps(data)
复制代码


在上面的代码中,data 字典中的 greet 键对应的值是一个函数,不能被序列化为 JSON 类型。所以会抛出 “TypeError: Object of type function is not JSON serializable” 的异常。

解决办法是,将不能被序列化的对象替换为能被序列化的对象,或者直接从字典中删除这些键。如果想找到哪个键不能被序列化,可以使用下面的方法:

可以使用 Python 内置的 isinstance 函数来判断字典中的每个值是否是可以被序列化的类型。例如:

def is_serializable(obj):    serializable_types = (int, float, str, bool, list, tuple, dict)    return isinstance(obj, serializable_types)
data = { "name": "John Smith", "age": 30, "city": "New York", "greet": greet}
for key, value in data.items(): if not is_serializable(value): print(f"{key} is not serializable")
复制代码


以上的方法可以找到哪个键不能被序列化。

用户头像

ModStart

关注

Laravel 的模块化开发框架。 2022-04-18 加入

ModStart 是一款基于 Laravel 的模块化开发框架,使用 Apache2.0 开源协议,免费且不限商业使用,目前被广泛应用于各大行业。

评论

发布
暂无评论
python 中 json 序列化汇总_ModStart_InfoQ写作社区