Qt解析和包装JSON字符串
背景
前几天我在C++项目中遇到一个问题,需要发送和解析JSON字符串。在Java中使用Map很简单,但是在C++中则不太容易实现。通过查询资料,我找到了两种方法:一种是使用框架nlohmann,另一种是Qt的库。
最初我没有选择Qt,因为它的接口不够人性化,而且相关资料也比较少。但是在我使用nlohmann的过程中发现如果JSON字符串为空则会报异常,因此最终我还是选择了Qt,因为它的鲁棒性更高,而且我的项目本来就是使用Qt开发的,这样一致性也更好,不需要引入外来的库。
使用
包装字符串
json格式具体有几种类型直接看Qt文档就行,我这里只使用QJsonObject和QJsonDocument。
比如要包装这个json格式字符串:
{
"name": "zhangsan",
"sex" : "male"
}
先定义一个QJsonObject,然后设置QJsonDocument就可以了
代码如下:
QJsonObject obj{
{"name", "zhangsan"},
{"sex", "male"}
};
QJsonDocument jsonDoc(obj);
qDebug() << jsonDoc.toJson();
使用运算符重载是不是很优雅。
当然也可以用QJsonObject的insert方法来插入值
解析JSON
以上面生成的json字符串为例
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(jsonDoc.toJson(),&err);
if(err.error != QJsonParseError::NoError){
qDebug() << "parse json failed:"<<err.errorString();
return;
}
QString name = doc["name"].toString();
QString sex = doc["sex"].toString();
如果获取不到值,就会为空,但不会报异常,代码的健壮性又高了许多。
总结
实际上,关于Qt的资料比较少,而且质量良莠不齐,我也找了很久才学会如何使用。虽然Qt的官方文档非常强大,但是对于初学者来说,有些不够易读,而且全是英文。另外,由于中西方文化差异,官方文档中的文章也不是那么容易理解。因此,我在学习的过程中尽量保持冷静,最终理解了Qt的使用方法,并写下了这篇文章,希望能帮助后来者更轻松地掌握Qt的相关知识。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix