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的相关知识。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值