QClaw中解析JSON需先包含json模块头文件并链接库,再用JsonParser::parse()解析UTF-8字符串,检查返回值及errorString;序列化支持手动构建JsonObject或QCLAW_JSON_SERIALIZABLE宏自动生成toJson;反序列化通过fromJson填充已有对象,未声明字段静默跳过。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

QClaw中解析JSON字符串为对象
你需要把一段合法的JSON文本转成C++可操作的结构化数据,比如读取配置文件或响应API返回内容。
第一步:确保项目已包含QClaw的json模块头文件,通常在源码根目录下的include/qclaw/json/路径下;若使用CMake,确认find_package(QClaw REQUIRED)已执行且链接了qclaw_json库。
第二步:构造QClaw::JsonParser实例,调用parse()方法传入UTF-8编码的QByteArray或QString——注意【输入必须是严格符合RFC 8259的JSON文本,开头不能有BOM,字符串键名必须用双引号包裹】。
第三步:检查返回值是否为QClaw::JsonValue类型的有效对象,若isUndefined()为true,说明解析失败,此时应立即检查parser.errorString()获取具体错误位置和原因,常见问题包括逗号遗漏、括号不匹配、单引号代替双引号。
QClaw中将自定义结构体序列化为JSON字符串
当你有一组C++类或结构体实例,需要导出为JSON供外部系统消费时,QClaw提供两种路径:
方法一:手动构建。先创建QClaw::JsonObject,逐个调用insert("key", value)填入字段;value支持int、double、QString、bool、嵌套JsonObject或JsonArray。这适合字段少、结构稳定的情况。
方法二:使用宏声明自动序列化。在结构体定义前添加QCLAW_JSON_SERIALIZABLE宏,并确保每个成员变量都已声明为public且类型在QClaw支持列表内(如int、QString、QList<T>、其他已标记该宏的结构体)。编译时宏会自动生成toJson()成员函数。
调用yourStruct.toJson().toJsonString()即可获得紧凑格式字符串;若需缩进可传入QClaw::JsonFormat::Indented参数。
QClaw中反序列化JSON到已有对象实例
反序列化不是“构造新对象”,而是把JSON字段值填充进一个已存在的对象内存空间,这对避免临时对象开销或复用缓存对象很关键。
第一步:确认目标类已用QCLAW_JSON_SERIALIZABLE标记,且所有待填充字段名与JSON中的key完全一致(区分大小写)。
第二步:获取已解析的QClaw::JsonValue,调用其toObject()得到QClaw::JsonObject引用。
第三步:直接调用对象的fromJson(const QClaw::JsonObject&)方法,传入上一步结果。该方法内部按字段名逐个匹配并赋值,未在JSON中出现的字段保持原值不变。
注意:【若JSON中存在目标结构体未声明的字段,QClaw默认静默跳过,不会报错也不会触发断言】。如需严格校验,应在调用前用object.keys()比对白名单。


















