【问题标题】:Serialization QList<MyObject> to JSON将 QList<MyObject> 序列化为 JSON
【发布时间】:2017-06-15 12:19:06
【问题描述】:

我有问题,我尝试在线搜索,例如将 QList 转换为 JSON,并将其发送到 URL,但首先,我没有发现任何关于使用 Qt 和 C++ 将 QList&lt;Myobject&gt; 序列化为 json 的信息。

我的不空QList

QList<User> lista;

我的目标是 JSON 列表。

如何序列化呢?我在网上看到QJson 存在,但它是一个外部组件... Qt 5.9 中有一个内部组件?

【问题讨论】:

  • 你调查过this吗?
  • 是的,也许不存在从 QList 到 Json 的直接解决方案,也许我将 Qlist 转换为 QJsonDocument ...相信

标签: c++ json qt serialization qlist


【解决方案1】:

一个外部组件

Qt has internal JSON support.

首先,您需要为对象本身提供QJsonValue 表示,然后迭代列表并将其转换为例如数组。使用QJsonDocument 将其转换为文本:

// https://github.com/KubaO/stackoverflown/tree/master/questions/json-serialize-44567345
#include <QtCore>
#include <cstdio>

struct User {
   QString name;
   int age;
   QJsonObject toJson() const {
      return {{"name", name}, {"age", age}};
   }
};

QJsonArray toJson(const QList<User> & list) {
   QJsonArray array;
   for (auto & user : list)
      array.append(user.toJson());
   return array;
}

int main() {
   QList<User> users{{"John Doe", 43}, {"Mary Doe", 44}};
   auto doc = QJsonDocument(toJson(users));
   std::printf("%s", doc.toJson().constData());
}

输出:

[
    {
        "age": 43,
        "name": "John Doe"
    },
    {
        "age": 44,
        "name": "Mary Doe"
    }
]

【讨论】:

    【解决方案2】:

    我认为一个简单的解决方案是将 JSON 对象创建为 QString。为此,您可以实现 QString User::toJson(),它会为您提供 JSON 有效的字符串。然后你可以用 foreach 迭代你的 QList :

    QString finalString ="";
    
    foreach(User user, lista) {
       finalString += user.toJson();
       // Something like that...
    }
    
    return finalString;
    

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 2017-04-29
      • 1970-01-01
      • 2012-02-25
      • 2023-03-11
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多