我正在尝试从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的经验,并且想帮助我,将不胜感激。也最欢迎使用数组处理或类似啤酒的任何其他示例。
提前谢谢!
答案 0 :(得分:0)
https://github.com/xyz347/x2struct可以将json加载到clsss或将类转换为json。
代码:
#include <iostream>
#include <map>
#include "x2struct/x2struct.hpp"
using namespace std;
struct Info {
string imie;
string nazwisko;
string email;
string haslo;
XTOSTRUCT(O(imie, nazwisko, email, haslo));
};
int main(int argc, char *argv[]) {
map<string, Info> m;
x2struct::X::loadjson("a.json", m, true);
for (map<string, Info>::const_iterator it=m.begin(); it!=m.end(); it++) {
cout<<it->first<<endl;
cout<<'\t'<<it->second.imie<<endl;
cout<<'\t'<<it->second.nazwisko<<endl;
cout<<'\t'<<it->second.email<<endl;
cout<<'\t'<<it->second.haslo<<endl;
}
}
输出为:
opiekun1
Maksym
Zawrotny
maksym@wp.pl
herbatka
opiekun2
Filip
Szatkowski
filip@wp.pl
kawusia