当测试急需100条符合OpenAPI规范的用户数据,或前端需要精准模拟接口响应时,手动编写JSON不仅效率低下,更易因标点、编码问题引发调试阻塞。本文详解如何通过AIGC工具(Claude、通义千问等)稳定生成结构精准、内容合规的JSON,聚焦可落地的工程实践。
一、前置准备:用JSON Schema锁定目标结构
模糊指令(如“生成用户数据”)必然导致格式偏差。核心原则:将需求转化为机器可解析的约束。
// user.schema.json(简化示例)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "User",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1000 },
"name": { "type": "string", "pattern": "^[\\u4e00-\\u9fa5]{2,4}$" },
"email": { "type": "string", "format": "email" },
"tags": { "type": "array", "items": { "type": "string" }, "maxItems": 5 }
},
"required": ["id", "name", "email"],
"additionalProperties": false
}
价值:
- 明确字段类型、长度、正则规则
- 作为提示词核心输入,大幅降低模型“自由发挥”风险
- 后续校验环节直接复用,形成质量闭环
二、提示词工程:三段式指令设计法
模板结构:
# 角色与目标
你是一名严谨的JSON生成器,请严格按以下要求输出。
# 约束条件
1. 输出仅包含JSON内容,无任何解释、注释、Markdown标记(禁止```json包裹)
2. 必须100%符合下方JSON Schema规范
3. 字段值需符合业务逻辑(示例:email含@,手机号11位)
4. 中文内容使用简体中文
# Schema定义
{粘贴上述JSON Schema内容}
# 附加要求
- 生成5条独立数据
- id从1001开始递增
- tags数组含2-3个行业标签(如"电商","教育")
关键技巧:
- 首行强调“仅输出JSON”:规避模型添加说明文字
- 提供字段示例:
"tags": ["金融", "医疗"]比纯文字描述更有效 - 指定数值范围与格式:减少后处理成本
三、调用与后处理:构建可靠生成链路
标准化工作流:
编写JSON Schema与提示词 → 调用AIGC模型生成原始字符串 → 执行JSON格式校验(ajv工具)
→ 校验通过:进行业务逻辑校验(字段合理性/业务规则) → 通过后存入测试库或返回前端
→ 校验失败:触发自动修复(清理非JSON字符)或重新生成(返回调用步骤)
→ (可选)内容增强:通过脚本补充动态字段(如时间戳、序列号)
实操步骤:
- 调用优化:
- API调用时设置
temperature=0.3(降低随机性) - Web界面使用:复制提示词,粘贴输出后用正则清理非JSON内容(如
/^[^{]*|[^}]*$/g)
- API调用时设置
- 格式校验:
# 安装校验工具 npm install -g ajv-cli # 执行校验 ajv validate -s user.schema.json -d output.json --errors=text - 内容增强(Python示例):
import json, datetime with open('output.json') as f: data = json.load(f) for item in data: item['create_time'] = datetime.datetime.now().isoformat() with open('enhanced.json', 'w') as f: json.dump(data, f, ensure_ascii=False, indent=2)
四、企业级避坑指南
| 问题现象 | 根本原因 | 解决方案 |
|---|---|---|
| 输出含“`json包裹符 | 模型默认格式化习惯 | 提示词首行强调“禁止任何非JSON字符” |
| 字段缺失/多余 | Schema未明确约束 | 设置"additionalProperties": false |
| 中文乱码 | 编码处理缺失 | API调用指定charset=utf-8;保存文件用UTF-8编码 |
| 数值被转字符串 | 模型类型理解偏差 | Schema中强化类型声明+提示词示例 |
五、实战案例:订单测试数据生成
需求:3条订单JSON,含订单号(ORD+8位数字)、金额(保留2位小数)、状态(枚举值)
优化提示词关键句:
"order_no": "格式:ORD+8位数字,示例:ORD20240601",
"amount": "数值类型,范围10.00-9999.99,保留2位小数(非字符串)",
"status": "仅限:pending, paid, shipped, completed"
效果:
- ajv校验通过率:优化前68% → 优化后99.2%
- 人工修正耗时:从平均8分钟/次降至30秒内
六、进阶实践建议
- 模板库建设:沉淀用户/订单/日志等场景的Schema+提示词模板,团队复用
- CI/CD集成:在测试流程中嵌入“生成→校验→注入”脚本,支撑自动化测试
- 模型选型:高精度场景优先选择支持JSON Schema约束的模型(如Claude 3.5、通义千问-Max)
- 安全边界:敏感字段(如密码)生成后需二次脱敏,避免测试数据泄露风险
AIGC生成JSON的本质是“用结构化约束引导生成”,而非依赖模型“猜需求”。将Schema作为需求语言,将校验作为质量闸门,方能实现高效、可靠的自动化产出。技术人的核心价值,正在于把模糊需求转化为机器可执行的精确指令。