Skip to content

shinexia/jsonutil-cpp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jsonutil-cpp

json解析的辅助类, 这里是基于rapidjson实现的, 使用boost::property_tree等也是同理的

示列:

example/simple_test.cpp

类定义

struct Person {
    int ID;
    std::string Name;
};

struct Room {
    std::shared_ptr<Person> Teacher;
    std::vector<Person> Students;
};


std::string ToJSON(const Person& v) {
    std::ostringstream oss;
    oss << "{"
       << "\"id\":" << ToJSON(v.ID)
       << ", \"name\":" << ToJSON(v.Name)
       << "}";
    return oss.str();
}

int FromJSON(const rapidjson::Value& in, Person& out) {
    int ret = 0;
    ret += FromJSON(in, "id", out.ID);
    ret += FromJSON(in, "name", out.Name);
    return ret;
}

std::string ToJSON(const Room& v) {
    std::ostringstream oss;
    oss << "{"
        << "\"teacher\":" << ToJSON(v.Teacher)
        << ", \"students\":" << ToJSON(v.Students)
        << "}";
    return oss.str();
}

int FromJSON(const rapidjson::Value& in, Room& out) {
    int ret = 0;
    ret += FromJSON(in, "teacher", out.Teacher);
    ret += FromJSON(in, "students", out.Students);
    return ret;
}

序列化

std::unique_ptr<Room> room(new Room());

// initializing

std::string json = ToPrettyJSON(room);

std::cout << json << std::endl;

输出

{
    "teacher": {
        "id": 0,
        "name": "teacher"
    },
    "students": [
        {
            "id": 0,
            "name": "student:0"
        },
        {
            "id": 1,
            "name": "student:1"
        },
        {
            "id": 2,
            "name": "student:2"
        }
    ]
}

反序列化

std::shared_ptr<Room> room2;
int ret = ParseJSON(json, room2);

About

json parser util in c++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors