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:"<

如果获取不到值,就会为空,但不会报异常,代码的健壮性又高了许多。

总结

实际上,关于Qt的资料比较少,而且质量良莠不齐,我也找了很久才学会如何使用。虽然Qt的官方文档非常强大,但是对于初学者来说,有些不够易读,而且全是英文。另外,由于中西方文化差异,官方文档中的文章也不是那么容易理解。因此,我在学习的过程中尽量保持冷静,最终理解了Qt的使用方法,并写下了这篇文章,希望能帮助后来者更轻松地掌握Qt的相关知识。

你可能感兴趣的:(笔记,字符串)