gpt4 book ai didi

c++ - 有关如何读取,写入和打印QJson代码的最小示例(使用QJsonDocument,QJsonArray,QJsonObject和QFile)

转载 作者:行者123 更新时间:2023-12-02 09:54:50 27 4
gpt4 key购买 nike

我正在寻找一个最小的完整的可执行qt或c++代码示例来解析和编写以下Json代码:

{
"FirstName": "John",
"LastName": "Doe",
"MiddleName": null,
"Age": 43,

"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"Phone numbers": [
"+44 1234567",
"+44 2345678"
]
"Valid":true,
}
  • 上面的示例包含一个具有5个键/值对的对象。其中两个值是字符串,一个是数字
  • 一个是另一个对象,最后一个是数组。
  • 有效的JSON文档是数组或对象,因此文档始终以方括号或大括号开头。

  • 编辑:
  • Json具有2 more键/值对-值'null'和'bool'

  • 是的,我看过 "Save Game Example"
    并试图找出答案。

    但是将近一周之后,我放弃了将没有枚举,QVectors和3个不同的头文件的最小Example转移到我的项目中来处理代码段。不管是小部件还是核心代码。

    我已经成功地完成了xml读写程序,但似乎我错过了一些重要的要点,并得到了与解析可能或不一定有关的json错误。如果没有一个最小的可正常工作的代码示例,我将无法排除它。

    因此,我的问题是:您能否提供一个最小的示例来编写,阅读和打印Json文件?预先感谢。

    最佳答案

    由于在SO上似乎没有明确的例子,所以我写了一个例子。
    它使用简单的变异来创建对象,但是如果您可以使用C++ 11,则应该看看std::initializer_list构造函数,它们使对象的构造更加紧凑。

    #include <QJsonObject>
    #include <QJsonArray>
    #include <QJsonDocument>
    #include <QtGlobal>
    #include <QTextStream>
    #include <QDebug>
    int main() {
    // 1. Create the document
    QJsonObject root;
    root["FirstName"] = "John";
    root["LastName"] = "Doe";
    root["Age"] = 43;

    // Construct nested object first, then store it in `root`
    QJsonObject Address;
    Address["Street"] = "Downing Street 10";
    Address["City"] = "London";
    Address["Country"] = "Great Britain";
    root["Address"] = Address;

    QJsonArray PhoneNumbers;
    PhoneNumbers.push_back("+44 1234567");
    PhoneNumbers.push_back("+44 2345678");
    root["Phone Numbers"] = PhoneNumbers;

    // `ba` contains JSON
    QByteArray ba = QJsonDocument(root).toJson();
    QTextStream ts(stdout);
    ts << "rendered JSON" << endl;
    ts << ba;
    {
    QFile fout("test.json");
    fout.open(QIODevice::WriteOnly);
    fout.write(ba);
    }

    // 2. Now read it back in
    QJsonParseError parseError;
    QJsonDocument doc2;
    {
    QFile fin("test.json");
    fin.open(QIODevice::ReadOnly);
    QByteArray ba2 = fin.readAll();
    doc2 = QJsonDocument::fromJson(ba2, &parseError);
    }

    if (parseError.error != QJsonParseError::NoError) {
    qWarning() << "Parse error at" << parseError.offset << ":" << parseError.errorString();
    } else {
    ts << "parsed JSON" << endl;
    ts << doc2.toJson(QJsonDocument::Compact);
    //or QJsonDocument::Indented for a JsonFormat
    }
    }

    关于c++ - 有关如何读取,写入和打印QJson代码的最小示例(使用QJsonDocument,QJsonArray,QJsonObject和QFile),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61075951/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com