Python对象转JSON字符串工具

在Python中,如果你有一个对象(假设是一个普通的Python对象),想要获取其所有属性和对应的值,并将其转换为JSON字符串,可以按照以下步骤操作。这里假设对象的所有属性都是可以被JSON序列化的基本类型(如字符串、数字、列表、字典等)。

示例代码

import json

def object_to_dict(obj):
    # 获取对象的所有属性(不包括方法)
    attributes = {key: value for key, value in vars(obj).items() 
                 if not key.startswith('__') and not callable(value)}
    return attributes

def object_to_json(obj):
    attributes_dict = object_to_dict(obj)
    return json.dumps(attributes_dict, indent=4, ensure_ascii=False)

# 示例使用
class ExampleClass:
    def __init__(self):
        self.name = "Test"
        self.value = 42
        self.list_data = [1, 2, 3]
        self.dict_data = {"a": 1, "b": 2}

example_obj = ExampleClass()
json_str = object_to_json(example_obj)
print(json_str)

输出结果

{
    "name": "Test",
    "value": 42,
    "list_data": [
        1,
        2,
        3
    ],
    "dict_data": {
        "a": 1,
        "b": 2
    }
}

代码说明

  1. object_to_dict函数

    • 使用vars(obj)获取对象的__dict__属性,它包含对象的可写属性。
    • 通过字典推导式过滤掉以__开头的特殊属性和可调用的方法(callable(value))。
    • 返回一个包含所有属性和值的字典。
  2. object_to_json函数

    • 调用object_to_dict获取字典。
    • 使用json.dumps将字典转换为格式化的JSON字符串(indent=4用于美化输出,ensure_ascii=False支持非ASCII字符)。
  3. 注意事项

    • 如果对象属性包含不可JSON序列化的值(如自定义类实例、函数等),会抛出TypeError。此时需要额外处理这些值(例如转换为字符串或忽略)。
    • 如果需要递归处理嵌套对象,可以扩展object_to_dict函数。

处理不可序列化属性

如果对象可能包含不可序列化的属性,可以修改object_to_dict如下:

def object_to_dict(obj):
    attributes = {}
    for key, value in vars(obj).items():
        if not key.startswith('__') and not callable(value):
            try:
                json.dumps(value)  # 测试是否可序列化
                attributes[key] = value
            except TypeError:
                attributes[key] = str(value)  # 不可序列化时转为字符串
    return attributes

这样即使属性无法直接序列化,也会被转换为字符串保存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值