序列化QList <myobject>到JSON

时间:2017-06-15 12:19:06

标签: c++ json qt serialization qlist

我有问题,我尝试在线搜索,如将QList转换为JSON,并将其发送到网址,但首先,我没有发现任何关于使用Qt和C ++的序列化QList<Myobject>到json

我的空QList

QList<User> lista;

我的目标是lista到JSON。

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

2 个答案:

答案 0 :(得分:0)

  

外部竞争者

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"
    }
]

答案 1 :(得分:-1)

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

QString finalString ="";

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

return finalString;