【问题标题】:How to reverse parse using rapidjson?如何使用rapidjson进行反向解析?
【发布时间】:2015-06-25 07:43:14
【问题描述】:

例如,我有一个类可以从字符串解析为对象:

学生.h

class Student{
public:
    inline std::string getName(){
        return this->name;
    }

    inline void setName(std::string name){
        this->name=name;
    }

    inline int getAge(){
        return this->age;
    }

    inline void setAge(int age){
        this->age=age;
    }

    void parse(rapidjson::Value& value);

    //std::string reverseParse();
protected:
    std::string name
    int age;
};

学生.cpp

void Student::parse(rapidjson::Value& value){
    if(value["name"].IsString()){
        this->name=value["name"].GetString();
    }
    if(value["age"].IsInt()){
        this->age=value["age"].GetInt();
    }
}

//std::string Student::reverseParse(){
//}

main.cpp

int main(){
    rapidjson::Document doc;
    doc.Parse<0>("{\"name\":\"abc\",\"age\":20}").HasParseError();

    Student student;
    student.parse(doc);
    printf("%s %d\n",student.getName().c_str(),stundent.getAge());

    student.setName("def");
    student.setAge(30);
    //printf("%s\n",student.reverseParse().c_str());
    return 0;
}

调用parse(doc)从json字符串中填充值,输出应该是:

abc 20

,现在我想反转解析过程,将对象转换为json字符串,通过将名称更改为def并将年龄更改为30,调用reverseParse()应该返回:

{"name":"def","age":30}

reverseParse()怎么写?

【问题讨论】:

    标签: json rapidjson


    【解决方案1】:

    有一个rapidjson教程here

    您的reverseParse() 可能如下所示:

    std::string reverseParse()
    {
        rapidjson::Document doc;
        doc.SetObject();
        rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
    
        doc.AddMember("name", this->name.c_str(), doc.GetAllocator());
        doc.AddMember("age", this->age, doc.GetAllocator());
    
        rapidjson::StringBuffer buffer;
        rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
        doc.Accept(writer);
    
        return buffer.GetString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多