在 QJsonArray 中附加 QJsonObjects

Posted

技术标签:

【中文标题】在 QJsonArray 中附加 QJsonObjects【英文标题】:append QJsonObjects in a QJsonArray 【发布时间】:2018-05-16 16:28:19 【问题描述】:

我正在尝试创建一个 json 文件,在其中我将 QjsonObjects 插入一个唯一的 QJsonArray 中,我得到的是每个 QjsonObject 都在一个独立的 QJsonArray 中,但我希望它们位于同一个数组中。

每次单击保存按钮时都会调用此函数,这就是我的 QJsonObjects 的创建方式。

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】:

您在方法内部创建QJsonArray listArray; 作为局部变量,因此数组变量在每次调用该方法后被销毁并且每个对象都存储在单独的新数组中,您必须在方法外部创建数组以便它会在所有调用中持续存在,然后向其中添加对象并更新文档。

QJsonArray listArray;

void List::insertDefect()
....

【讨论】:

以上是关于在 QJsonArray 中附加 QJsonObjects的主要内容,如果未能解决你的问题,请参考以下文章

Qt使用QJsonDocument、QJsonObject、QJsonArray解析JSON

从 qjsonarray 中删除大括号并从文档中替换方括号

将 JSON 文本文件转换回 QJsonArray

将JSON文本文件转换回QJsonArray

更新 QJsonArray 中的值并写回 Qt 中的 Json 文件

关于QT5使用QtScript解析QJsonArray数组的问题