@nyar_roller
Молодой, перспектиный Python Developer

Как работать с QJsonArray?

В моём QT aplication есть необходимость хранить значение структур одного типа в JSON словаре.
Значения должна быть возможность добавлять, читать, изменять, удалять. Про статью JSON Save Game Example знаю, пытался долго разобраться, ни к чему не пришёл, форумы тоже все облазил с таким же результатом.
Основная проблема заключается в следующем:
Допустим есть у меня следующая структура:
struct Laptop
struct Laptop{
    std::string name;
    int price;
    int year;
};

И я хочу хранить массив таких структур в JSON словаре. Использую следующий код:
spoiler
//filling structure
    Laptop Ltemp = {"some name" , 1000, 2022}; 

    //adding structure to JSON object
    QJsonObject g;
    g.insert("name", Ltemp.name.c_str());
    g.insert("price", Ltemp.price);
    g.insert("year", Gtemp.year);

    //open and wtritingmy JSON
    QFile file("path/to/myfile.json");
    QByteArray jsonData = file.readAll();
    QJsonDocument document = QJsonDocument::fromJson(jsonData);

    QJsonObject object = document.object();
    QJsonValue value = object.value("mydata");    
    QJsonArray myArray= value.toArray();

    myArray.removeAt(0);
    myArray.append(g);

    object.insert("mydata", myArray);

    document.setObject(object);

    //write to file
    file.write(document.toJson());
    file.close();

Ожидая при этом, что при повторном применении кода данные структуры добавятся в тот же массив, ключом которого является "mydata", но в итоге имею вот такое:
spoiler
{
    "mydata": [
        {
            "name": "some name",
            "price": 1000,
            "year": 2022
        }
    ]
}
{
    "mydata": [
        {
            "name": "some name",
            "price": 1000,
            "year": 2022
        }
    ]
}

вместо
"mydata": [
        {
            "name": "some name",
            "price": 1000,
            "year": 2022
        },
        {
            "name": "some name",
            "price": 1000,
            "year": 2022
        }
  
    ]
}
  • Вопрос задан
  • 329 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы