diff --git a/tools/json_example.py b/tools/json_example.py new file mode 100644 index 0000000..3a9096c --- /dev/null +++ b/tools/json_example.py @@ -0,0 +1,63 @@ +from pydantic import BaseModel, create_model +from typing import Any, Dict, List, Optional, get_args, get_origin +import json +from datetime import datetime, date + +def generate_example_json(model: type[BaseModel]) -> str: + """ + 根据 Pydantic V2 模型生成示例 JSON 数据结构。 + """ + + def _generate_example(field_type: Any) -> Any: + origin = get_origin(field_type) + args = get_args(field_type) + + if origin is list or origin is List: + if args: + return [_generate_example(args[0])] + else: + return [] + elif origin is dict or origin is Dict: + if len(args) == 2 and args[0] is str: + return {"key": _generate_example(args[1])} + else: + return {} + elif origin is Optional or origin is type(None): + if args: + return _generate_example(args[0]) + else: + return None + elif field_type is str: + return "string" + elif field_type is int: + return 0 + elif field_type is float: + return 0.0 + elif field_type is bool: + return True + elif field_type is datetime: + return datetime.now().isoformat() + elif field_type is date: + return date.today().isoformat() + elif issubclass(field_type, BaseModel): + return generate_example_json(field_type) + else: + return "unknown" # 对于未知类型返回 "unknown" + + example_data = {} + for field_name, field in model.model_fields.items(): + example_data[field_name] = _generate_example(field.annotation) + + return json.dumps(example_data, indent=2, default=str) + +if __name__ == "__main__": + import sys + from pathlib import Path + # 添加项目根目录到sys.path + sys.path.append(str(Path(__file__).resolve().parent.parent)) + from schema import Q_A + class Q_A_list(BaseModel): + Q_As: List[Q_A] + + print("示例 JSON:") + print(generate_example_json(Q_A_list))