добавить QJsonObjects в QJsonArray - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь создать файл json, в который я вставляю объекты QjsonObject только в один массив QJsonArray. Я получаю, что каждый объект QjsonObject находится в независимом массиве QJsonArray, но я хочу, чтобы они были в одном массиве.

эта функция вызывается при каждом нажатии кнопки сохранения, и именно так создаются мои объекты QJsonObject.

void List::insertDefect(const QString &parentDefect,const QString &defect,const QString &positions)const{
    QString filename =createListDefect();
    QFile file(filename);
    file.open(QIODevice::Append | QIODevice::Text);
    QJsonObject defectObject;
    defectObject.insert("parentDefect", QJsonValue::fromVariant(parentDefect));
    defectObject.insert("defect", QJsonValue::fromVariant(defect));
    defectObject.insert("positions", QJsonValue::fromVariant(positions));
    QJsonArray listArray;
    listArray.push_back(defectObject);
    QJsonDocument doc(listArray);
    file.write(doc.toJson(QJsonDocument::Indented));}

и вот пример сгенерированного файла json:

[
    {
        "defect": "MISSING, DAMAGED",
        "parentDefect": "SEAT BELTS",
        "positions": "F | RB | "
    }
]
[
    {
        "defect": "RIGIDITY,CORROSION,DISTORTION",
        "parentDefect": "CHASSIS OR SUB-FRAME",
        "positions": "B | RC | RB | "
    }
]

и я пытаюсь сделать так:

[
    {
        "defect": "MISSING, DAMAGED",
        "parentDefect": "SEAT BELTS",
        "positions": "F | RB | "
    },


    {
        "defect": "RIGIDITY,CORROSION,DISTORTION",
        "parentDefect": "CHASSIS OR SUB-FRAME",
        "positions": "B | RC | RB | "
    }
]

1 Ответ

0 голосов
/ 16 мая 2018

Вы создаете QJsonArray listArray; как локальную переменную внутри метода, поэтому переменная массива уничтожается после каждого вызова метода, и каждый объект сохраняется в отдельном новом массиве, вы должны создать массив вне метода так, чтобыон сохраняется во всех вызовах, затем добавляет к нему объекты и обновляет документ.

QJsonArray listArray;

void List::insertDefect()
....
...