首页 > 解决方案 > 从 JSon 获取 n 个对象及其字段,然后将它们存储为类对象

问题描述

我试图从 JSon 文件中获取有关我的对象的信息。它包含 n 个对象(例如 2 个),每个对象有 4 个字段。我通过 rapidjson 解析 .json,我的 IDE 是 Qt Creator。

我已经尝试使用http://rapidjson.org/md_doc_pointer.html#JsonPointer中描述的指针和他们的基本教程中的查询对象,但不知何故我无法让它工作。

这就是示例 .json 文件的外观。

{
"opiekun1" : {
    "imie": "Maksym",
    "nazwisko": "Zawrotny",
    "email": "maksym@wp.pl",
    "haslo": "herbatka"},
"opiekun2" : {
    "imie": "Filip",
    "nazwisko": "Szatkowski",
    "email": "filip@wp.pl",
    "haslo": "kawusia"}
}

我通过以下方式获取 DOM 文档:

FILE* fp = fopen(json_filename.c_str(), "rb");
char readBuffer[65536];    
FileReadStream is(fp, readBuffer, sizeof(readBuffer));
Document d;
d.ParseStream(is);    

我像这样尝试过 Pointer() :

Value* value = Pointer("/opiekun1/imie").Get(parsedJSon);

但我得到了:

invalid conversion from 'const rapidjson::GenericValue<rapidjson::UTF8<> >*' to 'rapidjson::Value* {aka rapidjson::GenericValue<rapidjson::UTF8<> >*}'

我的另一个尝试是遍历 Document 中的对象:

for (auto& object : parsedJSon.GetObject())
{
    CUzytkownik* user;
    user = new CUzytkownik;
    int counter = 0;
    for (Value::ConstMemberIterator itr = object.MemberBegin();
         itr != object.MemberEnd(); itr++)
    {
        if (itr->name.GetString() == "imie")
            user->imie = itr->value.GetString();

    }
}

但它说:

const struct rapidjson::GenericMember<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<> >' has no member named 'MemberEnd'

我认为我对处理 .json 文件中的对象有误解。谁能向我解释一下并提供一些示例代码?我希望我的输出看起来像这样:

CUzytkownik* opiekun1 = new CUzytkownik;
opiekun1->name = "Maksym";
opiekun1->nazwisko = "Zawrotny";
opiekun1->email = "maksym@wp.pl";
opiekun1->haslo = "herbatka";

如果有人对 rapidjson 有经验并愿意提供帮助,我将不胜感激。任何替代示例,如数组处理或类似的东西,也是最受欢迎的。

先感谢您!

标签: c++jsonparsingrapidjson

解决方案


推荐阅读