rapidjson

1,111 阅读1分钟

rapidjson 解析json字符串

rapidjson::Document d;
d.Parse(json);

//是否解析成功
std::cout << "-->" << d.HasParseError() << std::endl;
//是否含有某member
std::cout << "-->" << d.HasMember("project") << std::endl;

//操作符处理简单json
rapidjson::Value& project_value = d["project"];
//操作符处理复杂json
rapidjson::Value& status = d["body"]["status"];
std::cout << "-->" << project_value.GetString() << ", " << status.GetString() << std::endl;

//利用iterator处理简单json
auto iterator = d.FindMember("project");
if (iterator == d.MemberEnd()) {
    throw std::runtime_error("iterator to the end");
}
std::cout << iterator->name.GetString() << "  " << iterator->value.GetString() << std::endl;
//利用iterator处理复杂json
auto iter = d.FindMember("body");
auto sub_iter = iter->value.FindMember("status");
std::cout << sub_iter->name.GetString() << "," << sub_iter->value.GetString() << std::endl;

//处理array
rapidjson::Value& array = (*ptr)["array"];
for(int i=0;i<array.Size();++i){
    std::cout<<array[i].GetInt()<<std::endl;
}

rapidjson生成json字符串

/*
{
    "name":"vaadhoo",
    "uid":"20180814",
    "location":{
        "province":"js",
        "city":"nj",
        "code":210000
    },
    "years":[
        "2013",
        "2014",
        "2015",
        "2016"
    ],
    "books":[
        {
            "book_name":"Popular Science",
            "year":"Mar 1932",
            "author":"Unknown"
        },
        {
            "book_name":"The Life Story of a Technology",
            "year":"2005",
            "author":"Nicole Howard "
        }
    ]
}
*/

rapidjson::Document json_dom;
rapidjson::Document::AllocatorType& allocator = json_dom.GetAllocator();
json_dom.SetObject();

json_dom.AddMember("name", "vaadhoo", allocator);
json_dom.AddMember("uid", "20180814", allocator);

rapidjson::Value location(rapidjson::kObjectType);
location.AddMember("province", "js", allocator);
location.AddMember("city", "nj", allocator);
location.AddMember("code", 210000, allocator);
json_dom.AddMember("location", location, allocator);

rapidjson::Value years(rapidjson::kArrayType);
years.PushBack("2013", allocator);
years.PushBack("2014", allocator);
years.PushBack("2015", allocator);
years.PushBack("2016", allocator);
json_dom.AddMember("years", years, allocator);

rapidjson::Value books(rapidjson::kArrayType);
rapidjson::Value book1(rapidjson::kObjectType);
book1.AddMember("book_name", "Popular Science", allocator);
book1.AddMember("year", "Mar 1932", allocator);
book1.AddMember("author", "Unknown", allocator);
books.PushBack(book1, allocator);
rapidjson::Value book2(rapidjson::kObjectType);
book2.AddMember("book_name", "The Life Story of a Technology", allocator);
book2.AddMember("year", "2005", allocator);
book2.AddMember("author", "Nicole Howard ", allocator);
books.PushBack(book2, allocator);
json_dom.AddMember("books", books, allocator);

rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
json_dom.Accept(writer);

std::string result = buffer.GetString();
std::cout << result << std::endl;