基于yyjson封装的JSON序列化和反序列化C++类库
可适用于低版本C++,便于在多数C++环境使用,大部分JSON解析和创建功能已封装
本项目地址:https://gitcode.com/bitera/yyjson_for_cpp
yyjson项目地址: https://github.com/ibireme/yyjson
// Read JSON string
// #include "JParse.h" // Used for C++
{
const char* json = "{\"name\":\"Mash\",\"star\":4,\"hits\":[2,2,1,3]}";
// Create a parse object, parse JSON string, support {...} or [...]
JParse j_Parse(json);
if (j_Parse.isObj()) {
// If it is an object
auto j_obj = j_Parse.getObj();
if (j_obj) {
// Get root["name"]
printf("name: %s\n", j_obj->asChars("name"));
// Get root["star"]
printf("star: %d\n", j_obj->asInt("star"));
// Get root["hits"]
auto j_arr = j_obj->getArr("hits");
if (j_arr) {
// Traverse sub elements
for (size_t i = 0; i < j_arr->size(); i++) {
printf("hit%d: %d\n", (int)i, j_arr->asInt(i));
}
}
}
}
else if (j_Parse.isArr()) {
// If it is an array
auto j_arr = j_Parse.getArr();
if (j_arr) {
// Number of array elements
printf("Array size: %d\n", (int)j_arr->size());
//......
}
}
}
// Write JSON string
// #include "Create.h" //Used for C++
{
// Create a object
JCreateObject j_Obj;
// Set root["name"] and root["star"]
j_Obj.add("name", "Mash");
j_Obj.add("star", 4);
// Set root["hits"] with an array
int hits_arr[] = { 2, 2, 1, 3 };
j_Obj.add("hits", hits_arr, 4);
// Or vector
std::vector<int> hits_arr2 = { 6, 7, 8, 9 };
j_Obj.add("hits2", hits_arr2);
// Set root["obj"] with an object
auto j_obj1 = j_Obj.addObj("obj");
if (j_obj1) {
j_obj1->add("name", "Tom");
j_obj1->add("age", 18);
}
// Set root["arr"] with an array, can add more different types of elements
auto j_arr1 = j_Obj.addArr("arr");
if (j_arr1) {
j_arr1->add(1);
j_arr1->add(2);
j_arr1->add(3);
j_arr1->add(true);
j_arr1->addNull();
j_arr1->add(hits_arr2);
}
// To string
std::string str;
bool wTrue = j_Obj.write(str);
if (wTrue) {
printf("json: %s\n", str.data());
}
}
947

被折叠的 条评论
为什么被折叠?



