12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import json
- class ObjectToJsonArrayConverter:
- """
- 将Python对象转换为特定结构的JSON数组。
- """
- @staticmethod
- def convert(obj):
- """
- 递归转换对象为JSON数组结构。
- Args:
- obj: 待转换的Python对象(dict/list/其他)
- Returns:
- list: 转换后的结构,每个元素为 {"key": key, "value": processed_value}
- """
- def _process(value, in_list_context):
- """处理值,根据是否在列表环境中决定包装逻辑"""
- if isinstance(value, dict):
- # 字典递归转换为列表结构
- return ObjectToJsonArrayConverter.convert(value)
- if isinstance(value, list):
- # 列表递归处理,子元素默认在列表环境中
- return [_process(item, in_list_context=True) for item in value]
- # 普通值:列表环境中不包装,否则包装为单元素列表
- return value if in_list_context else [value]
- # 处理外层对象
- if isinstance(obj, dict):
- return [{"key": k, "value": _process(v, False)} for k, v in obj.items()]
- if isinstance(obj, list):
- return [{"key": None, "value": _process(item, True)} for item in obj]
- return [] # 非dict/list返回空(根据原逻辑)
- @staticmethod
- def to_json(obj, indent=None):
- """
- 转换为JSON字符串。
- Args:
- obj: 待转换对象
- indent: 缩进量(默认无缩进)
- Returns:
- str: JSON字符串
- """
- return json.dumps(
- ObjectToJsonArrayConverter.convert(obj),
- indent=indent,
- ensure_ascii=False
- )
- # 测试代码
- if __name__ == "__main__":
- test_obj = [
- {"name": "Alice"},
- [{"age": 30}, "直接值"]
- ]
- print(ObjectToJsonArrayConverter.to_json(test_obj, indent=4))
|