提交 8c58e625 编写于 作者: M Max Bruckner

Merge remote-tracking branch 'loigu/master' into cJSON_Raw

...@@ -989,6 +989,13 @@ static char *print_value(const cJSON *item, int depth, cjbool fmt, printbuffer * ...@@ -989,6 +989,13 @@ static char *print_value(const cJSON *item, int depth, cjbool fmt, printbuffer *
case cJSON_Number: case cJSON_Number:
out = print_number(item, p); out = print_number(item, p);
break; break;
case cJSON_Raw:
out = ensure(p, strlen(item->valuestring));
if (out)
{
strcpy(out, item->valuestring);
}
break;
case cJSON_String: case cJSON_String:
out = print_string(item, p); out = print_string(item, p);
break; break;
...@@ -1016,6 +1023,9 @@ static char *print_value(const cJSON *item, int depth, cjbool fmt, printbuffer * ...@@ -1016,6 +1023,9 @@ static char *print_value(const cJSON *item, int depth, cjbool fmt, printbuffer *
case cJSON_Number: case cJSON_Number:
out = print_number(item, 0); out = print_number(item, 0);
break; break;
case cJSON_Raw:
out = cJSON_strdup(item->valuestring);
break;
case cJSON_String: case cJSON_String:
out = print_string(item, 0); out = print_string(item, 0);
break; break;
...@@ -1988,6 +1998,23 @@ cJSON *cJSON_CreateString(const char *string) ...@@ -1988,6 +1998,23 @@ cJSON *cJSON_CreateString(const char *string)
return item; return item;
} }
extern cJSON *cJSON_CreateRaw(const char *raw)
{
cJSON *item = cJSON_New_Item();
if(item)
{
item->type = cJSON_Raw;
item->valuestring = cJSON_strdup(raw);
if(!item->valuestring)
{
cJSON_Delete(item);
return 0;
}
}
return item;
}
cJSON *cJSON_CreateArray(void) cJSON *cJSON_CreateArray(void)
{ {
cJSON *item = cJSON_New_Item(); cJSON *item = cJSON_New_Item();
......
...@@ -38,6 +38,7 @@ extern "C" ...@@ -38,6 +38,7 @@ extern "C"
#define cJSON_String (1 << 4) #define cJSON_String (1 << 4)
#define cJSON_Array (1 << 5) #define cJSON_Array (1 << 5)
#define cJSON_Object (1 << 6) #define cJSON_Object (1 << 6)
#define cJSON_Raw (1 << 7) //< raw json
#define cJSON_IsReference 256 #define cJSON_IsReference 256
#define cJSON_StringIsConst 512 #define cJSON_StringIsConst 512
...@@ -54,7 +55,7 @@ typedef struct cJSON ...@@ -54,7 +55,7 @@ typedef struct cJSON
/* The type of the item, as above. */ /* The type of the item, as above. */
int type; int type;
/* The item's string, if type==cJSON_String */ /* The item's string, if type==cJSON_String and type == cJSON_Raw */
char *valuestring; char *valuestring;
/* The item's number, if type==cJSON_Number */ /* The item's number, if type==cJSON_Number */
int valueint; int valueint;
...@@ -105,6 +106,8 @@ extern cJSON *cJSON_CreateFalse(void); ...@@ -105,6 +106,8 @@ extern cJSON *cJSON_CreateFalse(void);
extern cJSON *cJSON_CreateBool(int b); extern cJSON *cJSON_CreateBool(int b);
extern cJSON *cJSON_CreateNumber(double num); extern cJSON *cJSON_CreateNumber(double num);
extern cJSON *cJSON_CreateString(const char *string); extern cJSON *cJSON_CreateString(const char *string);
// raw json
extern cJSON *cJSON_CreateRaw(const char *raw);
extern cJSON *cJSON_CreateArray(void); extern cJSON *cJSON_CreateArray(void);
extern cJSON *cJSON_CreateObject(void); extern cJSON *cJSON_CreateObject(void);
...@@ -155,6 +158,7 @@ extern void cJSON_Minify(char *json); ...@@ -155,6 +158,7 @@ extern void cJSON_Minify(char *json);
#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) #define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) #define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) #define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
#define cJSON_AddRawToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateRaw(s))
/* When assigning an integer value, it needs to be propagated to valuedouble too. */ /* When assigning an integer value, it needs to be propagated to valuedouble too. */
#define cJSON_SetIntValue(object,val) ((object) ? (object)->valueint = (object)->valuedouble = (val) : (val)) #define cJSON_SetIntValue(object,val) ((object) ? (object)->valueint = (object)->valuedouble = (val) : (val))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册