У меня есть образец JSON
{
"id": 1,
"type": "deemed",
"University": {
"student": [{
"id": 10,
"name": "abc"
},
{
"id": 20,
"name": "def"
}
]
},
"year": 2019
}
Я пытаюсь проанализировать эти данные json с помощью rapidjson и хочу узнать схему json одной записи. Я могу получить ключи и типы каждого значения JSON. Теперь я хочу поддерживать иерархии, поддерживающие отношения между родителями и детьми.
Здесь я должен разобраться с двумя вещами:
1. Тип каждой клавиши - это сделано
2. Если тип ключа - массив / объект, то сколько дочерних записей присутствует и есть типы.
Это все, что я пытаюсь сделать для одной полной записи JSON. Любые предложения ??
Мой код для поиска типа каждой клавиши с помощью quickjson выглядит следующим образом ..
Подход: я поддерживаю очередь для хранения каждого значения ключа и на основе событий, генерируемых rapidjson, я обновляю тип каждого ключа.
Узел моей очереди:
Класс Node {
public:
string key;
string type;
Node* next;
};
Мой обработчик:
struct MyHandler: общедоступный BaseReaderHandler, MyHandler> {
bool StartObject(){
//cout<<"StartObject()"<<endl;
if(q->rear!=NULL){
if(q->rear->type== "")
q->rear->type = "object";
}
return true;
}
bool Key(const char* str, SizeType length, bool copy){
string n = string(str,length);
enqueue(q,n);
//cout<<"Key :" << str << endl;
return true;
}
bool Uint(unsigned u){
if(q->rear->type== ""){
q->rear->type = "integer";
}
return true;
}
bool String(const char* str, SizeType length, bool copy){
if(q->rear->type == ""){
q->rear->type = "string";
}
return true;
}
bool StartArray(){
//cout<<"Startarray()"<<endl;
if(q->rear->type==""){
q->rear->type = "array";
}
return true;
}
bool EndObject(SizeType memberCount) {
//cout << "EndObject: " << memberCount<<endl;
return true;
}
bool EndArray(SizeType elementCount) {
// cout << "EndArray: " <<elementCount<< endl;
return true;
}
* *} Тысяча двадцать-одина; * * тысяча двадцать две
Myoutput:
Идентификатор: целое число
Тип: строка
Университет: объект
студент: массив
ID: целое число,
Имя: строка
ID: целое число,
Имя: строка
год: целое число