2017-06-15 182 views
0

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

我没空QList

QList<User> lista; 

我的目标是要LISTA JSON。

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

+0

你有没有调查[这](http://doc.qt.io/qt-5/json.html)? – NathanOliver

+0

是的,也许不存在一个从QList到Json的直接解决方案,也许我会将Qlist转换为QJsonDocument ... beleive –

回答

0

外部compenent

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

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

QString finalString =""; 

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

return finalString;