2017-06-15 204 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;