我有一个示例json
{
"id": 1,
"type": "deemed",
"University": {
"student": [{
"id": 10,
"name": "abc"
},
{
"id": 20,
"name": "def"
}
]
},
"year": 2019
}
我正在尝试使用Rapidjson解析此json数据,并想知道一条记录的json模式。我能够获取每个json值的键和类型。现在,我要维护层次结构以维护父子关系。
在这里我必须处理两件事:
1.每个键的类型-完成
2.如果键类型为array / obj,则存在多少个子记录及其类型。
这就是我要为一个完整的json记录所做的所有操作。有什么建议吗?
我的通过rapidjson查找每个键的类型的代码如下。 方法:我正在维护一个队列来存储每个键值,并根据rapidjson抛出的事件来更新每个键的类型。
我的队列节点: 类Node {
public:
string key;
string type;
Node* next;
};
我的处理程序:
struct MyHandler:public 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;
}
};
我的输出:
id:整数 类型:字符串 大学:对象 学生:数组 id:整数 名称:字符串 id:整数 名称:字符串 年:整数