|
@@ -2,45 +2,63 @@ import json
|
|
|
|
|
|
|
|
|
class ObjectToJsonArrayConverter:
|
|
|
+ """
|
|
|
+ 将Python对象转换为特定结构的JSON数组。
|
|
|
+ """
|
|
|
+
|
|
|
@staticmethod
|
|
|
def convert(obj):
|
|
|
- def process_value(value):
|
|
|
+ """
|
|
|
+ 递归转换对象为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)
|
|
|
- elif not isinstance(value, list):
|
|
|
- return [value]
|
|
|
- return value
|
|
|
-
|
|
|
- result = []
|
|
|
- for key, value in obj.items():
|
|
|
- processed_value = process_value(value)
|
|
|
- result.append({
|
|
|
- "key": key,
|
|
|
- "value": processed_value
|
|
|
- })
|
|
|
- return result
|
|
|
+ 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):
|
|
|
- converted = ObjectToJsonArrayConverter.convert(obj)
|
|
|
- return json.dumps(converted, indent=indent, ensure_ascii=False)
|
|
|
+ """
|
|
|
+ 转换为JSON字符串。
|
|
|
|
|
|
+ Args:
|
|
|
+ obj: 待转换对象
|
|
|
+ indent: 缩进量(默认无缩进)
|
|
|
|
|
|
-# 使用示例
|
|
|
+ Returns:
|
|
|
+ str: JSON字符串
|
|
|
+ """
|
|
|
+ return json.dumps(
|
|
|
+ ObjectToJsonArrayConverter.convert(obj),
|
|
|
+ indent=indent,
|
|
|
+ ensure_ascii=False
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+# 测试代码
|
|
|
if __name__ == "__main__":
|
|
|
- original_obj = {
|
|
|
- "name": "Test",
|
|
|
- "hobbies": ["Reading", "Swimming"],
|
|
|
- "properties": {
|
|
|
- "desc": "英俊潇洒",
|
|
|
- "nested": {
|
|
|
- "age": 25
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- # 转换对象
|
|
|
- converter = ObjectToJsonArrayConverter()
|
|
|
- converted_json = converter.to_json(original_obj, indent=4)
|
|
|
-
|
|
|
- print(converted_json)
|
|
|
+ test_obj = [
|
|
|
+ {"name": "Alice"},
|
|
|
+ [{"age": 30}, "直接值"]
|
|
|
+ ]
|
|
|
+
|
|
|
+ print(ObjectToJsonArrayConverter.to_json(test_obj, indent=4))
|