修复JSON链表BUG
This commit is contained in:
parent
367868edcd
commit
45c733cda7
|
@ -96,11 +96,18 @@ namespace gb
|
||||||
node->valuestring = NULL;
|
node->valuestring = NULL;
|
||||||
node->child = NULL;
|
node->child = NULL;
|
||||||
}
|
}
|
||||||
cJSON* json::create_element_with_name(const char* name)
|
cJSON* json::create_element(bool is_array)
|
||||||
{
|
{
|
||||||
cJSON* obj = cJSON_CreateObject();
|
cJSON* obj = is_array ? cJSON_CreateArray() : cJSON_CreateObject();
|
||||||
|
|
||||||
bzero(obj, sizeof(*obj));
|
bzero(obj, sizeof(*obj));
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
cJSON* json::create_element_with_name(const char* name)
|
||||||
|
{
|
||||||
|
cJSON* obj = json::create_element();
|
||||||
|
|
||||||
if(name)
|
if(name)
|
||||||
{
|
{
|
||||||
obj->string = (char*)malloc(strlen(name) + 4);
|
obj->string = (char*)malloc(strlen(name) + 4);
|
||||||
|
@ -154,7 +161,12 @@ namespace gb
|
||||||
|
|
||||||
now = json::create_element_with_name(path[0].c_str());
|
now = json::create_element_with_name(path[0].c_str());
|
||||||
if (prev)
|
if (prev)
|
||||||
*prev = now;
|
{
|
||||||
|
cJSON* pr = (cJSON*)((DWORD_PTR)prev - (DWORD_PTR)&((cJSON*)0)->next);
|
||||||
|
pr->next = now;
|
||||||
|
now->prev = pr;
|
||||||
|
// *prev = now;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
obj_->child = now;
|
obj_->child = now;
|
||||||
|
@ -185,7 +197,7 @@ namespace gb
|
||||||
if(!create)
|
if(!create)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
obj_ = cJSON_CreateObject();
|
obj_ = json::create_element();
|
||||||
obj_->child = json::create_element_with_name(tree[0].c_str());
|
obj_->child = json::create_element_with_name(tree[0].c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +233,7 @@ namespace gb
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
obj_ = array ? cJSON_CreateArray() : cJSON_CreateObject();
|
obj_ = json::create_element(array);
|
||||||
is_array_ = array;
|
is_array_ = array;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -406,7 +418,7 @@ namespace gb
|
||||||
if(is_array_)
|
if(is_array_)
|
||||||
{
|
{
|
||||||
if(!obj_)
|
if(!obj_)
|
||||||
obj_ = cJSON_CreateArray();
|
obj_ = json::create_element(true);
|
||||||
cJSON_AddItemToArray(obj_, val ? cJSON_CreateTrue() : cJSON_CreateFalse());
|
cJSON_AddItemToArray(obj_, val ? cJSON_CreateTrue() : cJSON_CreateFalse());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,7 +446,7 @@ namespace gb
|
||||||
if(is_array_)
|
if(is_array_)
|
||||||
{
|
{
|
||||||
if(!obj_)
|
if(!obj_)
|
||||||
obj_ = cJSON_CreateArray();
|
obj_ = json::create_element(true);
|
||||||
cJSON_AddItemToArray(obj_, cJSON_CreateNumber(val));
|
cJSON_AddItemToArray(obj_, cJSON_CreateNumber(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,7 +472,7 @@ namespace gb
|
||||||
if(is_array_)
|
if(is_array_)
|
||||||
{
|
{
|
||||||
if(!obj_)
|
if(!obj_)
|
||||||
obj_ = cJSON_CreateArray();
|
obj_ = json::create_element(true);
|
||||||
cJSON_AddItemToArray(obj_, cJSON_CreateNumber(val));
|
cJSON_AddItemToArray(obj_, cJSON_CreateNumber(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,7 +498,7 @@ namespace gb
|
||||||
if(is_array_)
|
if(is_array_)
|
||||||
{
|
{
|
||||||
if(!obj_)
|
if(!obj_)
|
||||||
obj_ = cJSON_CreateArray();
|
obj_ = json::create_element(true);
|
||||||
cJSON_AddItemToArray(obj_, cJSON_CreateString(val.c_str()));
|
cJSON_AddItemToArray(obj_, cJSON_CreateString(val.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,7 +530,7 @@ namespace gb
|
||||||
if(is_array_)
|
if(is_array_)
|
||||||
{
|
{
|
||||||
if(!obj_)
|
if(!obj_)
|
||||||
obj_ = cJSON_CreateArray();
|
obj_ = json::create_element(true);
|
||||||
if(obj && obj->obj_)
|
if(obj && obj->obj_)
|
||||||
{
|
{
|
||||||
cJSON_AddItemToArray(obj_, obj->obj_);
|
cJSON_AddItemToArray(obj_, obj->obj_);
|
||||||
|
|
|
@ -29,6 +29,7 @@ namespace gb
|
||||||
static std::string to_string(cJSON* root, bool formatted);
|
static std::string to_string(cJSON* root, bool formatted);
|
||||||
static std::string get_value_as_string(cJSON* root, bool integer = false);
|
static std::string get_value_as_string(cJSON* root, bool integer = false);
|
||||||
static void free_node_data(cJSON* node);
|
static void free_node_data(cJSON* node);
|
||||||
|
static cJSON* create_element(bool is_array = false);
|
||||||
static cJSON* create_element_with_name(const char* name);
|
static cJSON* create_element_with_name(const char* name);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue