一生一世学坛

 找回密码
 立即注册
搜索
查看: 6099|回复: 1
打印 上一主题 下一主题

QJsonObject 和QString 的转换

[复制链接]

334

主题

385

帖子

6816

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6816
跳转到指定楼层
楼主
发表于 2020-12-7 11:33:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QJsonObject 和QString 的转换
QString InfoBase::JsonToString(const QJsonObject& json) const
{
    return QString(QJsonDocument(json).toJson(QJsonDocument::Compact));
}
  
QJsonObject InfoBase::StringToJson(const QString& str) const
{
    QJsonObject l_ret;
  
    QJsonParseError l_err;
    QJsonDocument l_doc = QJsonDocument::fromJson(str.toUtf8(), &l_err);
    if (l_err.error == QJsonParseError::NoError)
    {
        if (l_doc.isObject())
        {
            l_ret = l_doc.object();
        }
    }
    return l_ret;
}

回复

使用道具 举报

334

主题

385

帖子

6816

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6816
沙发
 楼主| 发表于 2021-2-23 10:23:04 | 只看该作者
  1. {
  2.     "Company": "Digia",
  3.     "From": 1991,
  4.     "Name": "Qt",
  5.     "Page": {
  6.         "Developers": "https://www.qt.io/developers/",
  7.         "Download": "https://www.qt.io/download/",
  8.         "Home": "https://www.qt.io/"
  9.     },
  10.     "Version": [
  11.         4.8,
  12.         5.2,
  13.         5.7
  14.     ]
  15. }

  16. 构造此json:
  17. // 构建 Json 数组 - Version
  18. QJsonArray versionArray;
  19. versionArray.append(4.8);
  20. versionArray.append(5.2);
  21. versionArray.append(5.7);

  22. // 构建 Json 对象 - Page
  23. QJsonObject pageObject;
  24. pageObject.insert("Home", "https://www.qt.io/");
  25. pageObject.insert("Download", "https://www.qt.io/download/");
  26. pageObject.insert("Developers", "https://www.qt.io/developers/");

  27. // 构建 Json 对象
  28. QJsonObject json;
  29. json.insert("Name", "Qt");
  30. json.insert("Company", "Digia");
  31. json.insert("From", 1991);
  32. json.insert("Version", QJsonValue(versionArray));
  33. json.insert("Page", QJsonValue(pageObject));

  34. // 构建 Json 文档
  35. QJsonDocument document;
  36. document.setObject(json);
  37. QByteArray byteArray = document.toJson(QJsonDocument::Compact);
  38. QString strJson(byteArray);

  39. qDebug() << strJson;

  40. 解析此json:
  41. QJsonParseError jsonError;
  42. QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError);  // 转化为 JSON 文档
  43. if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {  // 解析未发生错误
  44.     if (doucment.isObject()) {  // JSON 文档为对象
  45.         QJsonObject object = doucment.object();  // 转化为对象
  46.         if (object.contains("Name")) {
  47.             QJsonValue value = object.value("Name");
  48.             if (value.isString()) {
  49.                 QString strName = value.toString();
  50.                 qDebug() << "Name : " << strName;
  51.             }
  52.         }
  53.         if (object.contains("Company")) {
  54.             QJsonValue value = object.value("Company");
  55.             if (value.isString()) {
  56.                 QString strCompany = value.toString();
  57.                 qDebug() << "Company : " << strCompany;
  58.             }
  59.         }
  60.         if (object.contains("From")) {
  61.             QJsonValue value = object.value("From");
  62.             if (value.isDouble()) {
  63.                 int nFrom = value.toVariant().toInt();
  64.                 qDebug() << "From : " << nFrom;
  65.             }
  66.         }
  67.         if (object.contains("Version")) {
  68.             QJsonValue value = object.value("Version");
  69.             if (value.isArray()) {  // Version 的 value 是数组
  70.                 QJsonArray array = value.toArray();
  71.                 int nSize = array.size();
  72.                 for (int i = 0; i < nSize; ++i) {
  73.                     QJsonValue value = array.at(i);
  74.                     if (value.isDouble()) {
  75.                         double dVersion = value.toDouble();
  76.                         qDebug() << "Version : " << dVersion;
  77.                     }
  78.                 }
  79.             }
  80.         }
  81.         if (object.contains("Page")) {
  82.             QJsonValue value = object.value("Page");
  83.             if (value.isObject()) {  // Page 的 value 是对象
  84.                 QJsonObject obj = value.toObject();
  85.                 if (obj.contains("Home")) {
  86.                     QJsonValue value = obj.value("Home");
  87.                     if (value.isString()) {
  88.                         QString strHome = value.toString();
  89.                         qDebug() << "Home : " << strHome;
  90.                     }
  91.                 }
  92.                 if (obj.contains("Download")) {
  93.                     QJsonValue value = obj.value("Download");
  94.                     if (value.isString()) {
  95.                         QString strDownload = value.toString();
  96.                         qDebug() << "Download : " << strDownload;
  97.                     }
  98.                 }
  99.                 if (obj.contains("Developers")) {
  100.                     QJsonValue value = obj.value("Developers");
  101.                     if (value.isString()) {
  102.                         QString strDevelopers = value.toString();
  103.                         qDebug() << "Developers : " << strDevelopers;
  104.                     }
  105.                 }
  106.             }
  107.         }
  108.     }
  109. }

复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|分享学习  

GMT+8, 2024-5-2 12:51 , Processed in 0.042598 second(s), 5 queries , File On.

声明:本站严禁任何人以任何形式发表违法言论!

本站内容由网友原创或转载,如果侵犯了您的合法权益,请及时联系处理!© 2017 zamxqun@163.com

皖公网安备 34010402700634号

皖ICP备17017002号-1

快速回复 返回顶部 返回列表