การทำให้เป็นอนุกรม QList‹MyObject› เป็น JSON

ฉันมีปัญหา ฉันลองค้นหาออนไลน์เช่น แปลง QList เป็น JSON แล้วส่งไปที่ URL แต่ก่อนอื่น ฉันไม่พบอะไรเลยเกี่ยวกับซีเรียลไลซ์ QList<Myobject> เป็น json ด้วย Qt และ C++

ฉันไม่ว่างเปล่า QList:

QList<User> lista;

เป้าหมายของฉันคือ lista ถึง JSON

จะทำให้ซีเรียลไลซ์ได้อย่างไร? ฉันเห็นทางออนไลน์ว่ามี QJson อยู่ แต่เป็นส่วนประกอบภายนอก ... มีส่วนประกอบภายในภายใน Qt 5.9 หรือไม่


person Mr. Developer    schedule 15.06.2017    source แหล่งที่มา
comment
คุณได้ตรวจสอบสิ่งนี้แล้วหรือยัง   -  person NathanOliver    schedule 15.06.2017
comment
ใช่ อาจไม่มีวิธีแก้ไขปัญหาโดยตรงจาก QList เป็น Json บางทีฉันอาจแปลง Qlist เป็น QJsonDocument ... เชื่อเถอะ   -  person Mr. Developer    schedule 15.06.2017


คำตอบ (2)


องค์ประกอบภายนอก

Qt มีการสนับสนุน JSON ภายใน

ขั้นแรกคุณต้องจัดเตรียมการแสดง 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"
    }
]
person Kuba hasn't forgotten Monica    schedule 15.06.2017

ฉันคิดว่าวิธีแก้ปัญหาง่ายๆคือสร้างวัตถุ JSON เป็น QString ในการดำเนินการดังกล่าว คุณสามารถใช้งาน QString User::toJson()ซึ่งจะทำให้คุณมีสตริงที่ถูกต้องกับ JSON จากนั้นคุณสามารถวนซ้ำ QList ของคุณด้วย foreach :

QString finalString ="";

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

return finalString;
person Xatyrian    schedule 15.06.2017