解析json数据并从数据中获取一条记录的模式

时间:2019-05-06 09:27:47

标签: c++ json oop jsonschema rapidjson

我有一个示例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:整数 名称:字符串 年:整数

0 个答案:

没有答案