mirror of
https://github.com/json-c/json-c.git
synced 2026-04-12 00:39:06 +08:00
Merge pull request #277 from ALLTERCO/json_object_set_xxx
Json object set xxx
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -33,6 +33,7 @@
|
|||||||
/tests/test_set_serializer
|
/tests/test_set_serializer
|
||||||
/tests/test_compare
|
/tests/test_compare
|
||||||
/tests/test_util_file
|
/tests/test_util_file
|
||||||
|
/tests/test_set_value
|
||||||
/tests/*.vg.out
|
/tests/*.vg.out
|
||||||
/tests/*.log
|
/tests/*.log
|
||||||
/tests/*.trs
|
/tests/*.trs
|
||||||
|
|||||||
@@ -568,6 +568,13 @@ json_bool json_object_get_boolean(const struct json_object *jso)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int json_object_set_boolean(struct json_object *jso,json_bool new_value){
|
||||||
|
if (!jso || jso->o_type!=json_type_boolean)
|
||||||
|
return 0;
|
||||||
|
jso->o.c_boolean=new_value;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* json_object_int */
|
/* json_object_int */
|
||||||
|
|
||||||
@@ -627,6 +634,14 @@ int32_t json_object_get_int(const struct json_object *jso)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int json_object_set_int(struct json_object *jso,int new_value){
|
||||||
|
if (!jso || jso->o_type!=json_type_int)
|
||||||
|
return 0;
|
||||||
|
jso->o.c_int64=new_value;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct json_object* json_object_new_int64(int64_t i)
|
struct json_object* json_object_new_int64(int64_t i)
|
||||||
{
|
{
|
||||||
struct json_object *jso = json_object_new(json_type_int);
|
struct json_object *jso = json_object_new(json_type_int);
|
||||||
@@ -659,6 +674,12 @@ int64_t json_object_get_int64(const struct json_object *jso)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int json_object_set_int64(struct json_object *jso,int64_t new_value){
|
||||||
|
if (!jso || jso->o_type!=json_type_int)
|
||||||
|
return 0;
|
||||||
|
jso->o.c_int64=new_value;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* json_object_double */
|
/* json_object_double */
|
||||||
|
|
||||||
@@ -720,7 +741,7 @@ int json_object_double_to_json_string(struct json_object* jso,
|
|||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
return json_object_double_to_json_string_format(jso, pb, level, flags,
|
return json_object_double_to_json_string_format(jso, pb, level, flags,
|
||||||
jso->_userdata);
|
(const char *)jso->_userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct json_object* json_object_new_double(double d)
|
struct json_object* json_object_new_double(double d)
|
||||||
@@ -813,6 +834,12 @@ double json_object_get_double(const struct json_object *jso)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int json_object_set_double(struct json_object *jso,double new_value){
|
||||||
|
if (!jso || jso->o_type!=json_type_double)
|
||||||
|
return 0;
|
||||||
|
jso->o.c_double=new_value;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* json_object_string */
|
/* json_object_string */
|
||||||
|
|
||||||
@@ -908,6 +935,27 @@ int json_object_get_string_len(const struct json_object *jso)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int json_object_set_string(json_object* jso, const char* s) {
|
||||||
|
return json_object_set_string_len(jso, s, (int)(strlen(s)));
|
||||||
|
}
|
||||||
|
|
||||||
|
int json_object_set_string_len(json_object* jso, const char* s, int len){
|
||||||
|
if (jso==NULL || jso->o_type!=json_type_string) return 0;
|
||||||
|
char *dstbuf;
|
||||||
|
if (len<LEN_DIRECT_STRING_DATA) {
|
||||||
|
dstbuf=jso->o.c_string.str.data;
|
||||||
|
if (jso->o.c_string.len>=LEN_DIRECT_STRING_DATA) free(jso->o.c_string.str.ptr);
|
||||||
|
} else {
|
||||||
|
dstbuf=(char *)malloc(len+1);
|
||||||
|
if (dstbuf==NULL) return 0;
|
||||||
|
if (jso->o.c_string.len>=LEN_DIRECT_STRING_DATA) free(jso->o.c_string.str.ptr);
|
||||||
|
jso->o.c_string.str.ptr=dstbuf;
|
||||||
|
}
|
||||||
|
jso->o.c_string.len=len;
|
||||||
|
memcpy(dstbuf, (const void *)s, len);
|
||||||
|
dstbuf[len] = '\0';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* json_object_array */
|
/* json_object_array */
|
||||||
|
|
||||||
|
|||||||
@@ -620,6 +620,19 @@ extern struct json_object* json_object_new_boolean(json_bool b);
|
|||||||
extern json_bool json_object_get_boolean(const struct json_object *obj);
|
extern json_bool json_object_get_boolean(const struct json_object *obj);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the json_bool value of a json_object
|
||||||
|
*
|
||||||
|
* The type of obj is checked to be a json_type_boolean and 0 is returned
|
||||||
|
* if it is not without any further actions. If type of obj is json_type_boolean
|
||||||
|
* the obect value is chaned to new_value
|
||||||
|
*
|
||||||
|
* @param obj the json_object instance
|
||||||
|
* @param new_value the value to be set
|
||||||
|
* @returns 1 if value is set correctly, 0 otherwise
|
||||||
|
*/
|
||||||
|
extern int json_object_set_boolean(struct json_object *obj,json_bool new_value);
|
||||||
|
|
||||||
|
|
||||||
/* int type methods */
|
/* int type methods */
|
||||||
|
|
||||||
/** Create a new empty json_object of type json_type_int
|
/** Create a new empty json_object of type json_type_int
|
||||||
@@ -654,6 +667,19 @@ extern struct json_object* json_object_new_int64(int64_t i);
|
|||||||
*/
|
*/
|
||||||
extern int32_t json_object_get_int(const struct json_object *obj);
|
extern int32_t json_object_get_int(const struct json_object *obj);
|
||||||
|
|
||||||
|
/** Set the int value of a json_object
|
||||||
|
*
|
||||||
|
* The type of obj is checked to be a json_type_int and 0 is returned
|
||||||
|
* if it is not without any further actions. If type of obj is json_type_int
|
||||||
|
* the obect value is chaned to new_value
|
||||||
|
*
|
||||||
|
* @param obj the json_object instance
|
||||||
|
* @param new_value the value to be set
|
||||||
|
* @returns 1 if value is set correctly, 0 otherwise
|
||||||
|
*/
|
||||||
|
extern int json_object_set_int(struct json_object *obj,int new_value);
|
||||||
|
|
||||||
|
|
||||||
/** Get the int value of a json_object
|
/** Get the int value of a json_object
|
||||||
*
|
*
|
||||||
* The type is coerced to a int64 if the passed object is not a int64.
|
* The type is coerced to a int64 if the passed object is not a int64.
|
||||||
@@ -670,6 +696,19 @@ extern int32_t json_object_get_int(const struct json_object *obj);
|
|||||||
extern int64_t json_object_get_int64(const struct json_object *obj);
|
extern int64_t json_object_get_int64(const struct json_object *obj);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the int64_t value of a json_object
|
||||||
|
*
|
||||||
|
* The type of obj is checked to be a json_type_int and 0 is returned
|
||||||
|
* if it is not without any further actions. If type of obj is json_type_int
|
||||||
|
* the obect value is chaned to new_value
|
||||||
|
*
|
||||||
|
* @param obj the json_object instance
|
||||||
|
* @param new_value the value to be set
|
||||||
|
* @returns 1 if value is set correctly, 0 otherwise
|
||||||
|
*/
|
||||||
|
extern int json_object_set_int64(struct json_object *obj,int64_t new_value);
|
||||||
|
|
||||||
|
|
||||||
/* double type methods */
|
/* double type methods */
|
||||||
|
|
||||||
/** Create a new empty json_object of type json_type_double
|
/** Create a new empty json_object of type json_type_double
|
||||||
@@ -760,6 +799,20 @@ extern int json_object_double_to_json_string(struct json_object* jso,
|
|||||||
extern double json_object_get_double(const struct json_object *obj);
|
extern double json_object_get_double(const struct json_object *obj);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the double value of a json_object
|
||||||
|
*
|
||||||
|
* The type of obj is checked to be a json_type_double and 0 is returned
|
||||||
|
* if it is not without any further actions. If type of obj is json_type_double
|
||||||
|
* the obect value is chaned to new_value
|
||||||
|
*
|
||||||
|
* @param obj the json_object instance
|
||||||
|
* @param new_value the value to be set
|
||||||
|
* @returns 1 if value is set correctly, 0 otherwise
|
||||||
|
*/
|
||||||
|
extern int json_object_set_double(struct json_object *obj,double new_value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* string type methods */
|
/* string type methods */
|
||||||
|
|
||||||
/** Create a new empty json_object of type json_type_string
|
/** Create a new empty json_object of type json_type_string
|
||||||
@@ -801,6 +854,26 @@ extern const char* json_object_get_string(struct json_object *obj);
|
|||||||
*/
|
*/
|
||||||
extern int json_object_get_string_len(const struct json_object *obj);
|
extern int json_object_get_string_len(const struct json_object *obj);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the string value of a json_object with zero terminated strings
|
||||||
|
* equivalent to json_object_set_string_len (obj, new_value, strlen(new_value))
|
||||||
|
* @returns 1 if value is set correctly, 0 otherwise
|
||||||
|
*/
|
||||||
|
extern int json_object_set_string(json_object* obj, const char* new_value);
|
||||||
|
|
||||||
|
/** Set the string value of a json_object str
|
||||||
|
*
|
||||||
|
* The type of obj is checked to be a json_type_string and 0 is returned
|
||||||
|
* if it is not without any further actions. If type of obj is json_type_string
|
||||||
|
* the obect value is chaned to new_value
|
||||||
|
*
|
||||||
|
* @param obj the json_object instance
|
||||||
|
* @param new_value the value to be set; Since string legth is given in len this need not be zero terminated
|
||||||
|
* @param len the length of new_value
|
||||||
|
* @returns 1 if value is set correctly, 0 otherwise
|
||||||
|
*/
|
||||||
|
extern int json_object_set_string_len(json_object* obj, const char* new_value, int len);
|
||||||
|
|
||||||
/** Check if two json_object's are equal
|
/** Check if two json_object's are equal
|
||||||
*
|
*
|
||||||
* If the passed objects are equal 1 will be returned.
|
* If the passed objects are equal 1 will be returned.
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ TESTS+= test_charcase.test
|
|||||||
TESTS+= test_printbuf.test
|
TESTS+= test_printbuf.test
|
||||||
TESTS+= test_set_serializer.test
|
TESTS+= test_set_serializer.test
|
||||||
TESTS+= test_compare.test
|
TESTS+= test_compare.test
|
||||||
|
TESTS+= test_set_value.test
|
||||||
|
|
||||||
check_PROGRAMS=
|
check_PROGRAMS=
|
||||||
check_PROGRAMS += $(TESTS:.test=)
|
check_PROGRAMS += $(TESTS:.test=)
|
||||||
|
|||||||
52
tests/test_set_value.c
Normal file
52
tests/test_set_value.c
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "json.h"
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
json_object *tmp=json_object_new_int(123);
|
||||||
|
assert (json_object_get_int(tmp)==123);
|
||||||
|
json_object_set_int(tmp,321);
|
||||||
|
assert (json_object_get_int(tmp)==321);
|
||||||
|
printf("INT PASSED\n");
|
||||||
|
json_object_set_int64(tmp,(int64_t)321321321);
|
||||||
|
assert (json_object_get_int64(tmp)==321321321);
|
||||||
|
json_object_put(tmp);
|
||||||
|
printf("INT64 PASSED\n");
|
||||||
|
tmp=json_object_new_boolean(TRUE);
|
||||||
|
assert (json_object_get_boolean(tmp)==TRUE);
|
||||||
|
json_object_set_boolean(tmp,FALSE);
|
||||||
|
assert (json_object_get_boolean(tmp)==FALSE);
|
||||||
|
json_object_set_boolean(tmp,TRUE);
|
||||||
|
assert (json_object_get_boolean(tmp)==TRUE);
|
||||||
|
json_object_put(tmp);
|
||||||
|
printf("BOOL PASSED\n");
|
||||||
|
tmp=json_object_new_double(12.34);
|
||||||
|
assert (json_object_get_double(tmp)==12.34);
|
||||||
|
json_object_set_double(tmp,34.56);
|
||||||
|
assert (json_object_get_double(tmp)==34.56);
|
||||||
|
json_object_set_double(tmp,6435.34);
|
||||||
|
assert (json_object_get_double(tmp)==6435.34);
|
||||||
|
json_object_put(tmp);
|
||||||
|
printf("DOUBLE PASSED\n");
|
||||||
|
#define SHORT "SHORT"
|
||||||
|
#define MID "A MID STRING"
|
||||||
|
// 12345678901234567890123456789012....
|
||||||
|
#define HUGE "A string longer than 32 chars as to check non local buf codepath"
|
||||||
|
tmp=json_object_new_string(SHORT);
|
||||||
|
assert (strcmp(json_object_get_string(tmp),SHORT)==0);
|
||||||
|
json_object_set_string(tmp,MID);
|
||||||
|
assert (strcmp(json_object_get_string(tmp),MID)==0);
|
||||||
|
json_object_set_string(tmp,HUGE);
|
||||||
|
assert (strcmp(json_object_get_string(tmp),HUGE)==0);
|
||||||
|
json_object_set_string(tmp,SHORT);
|
||||||
|
assert (strcmp(json_object_get_string(tmp),SHORT)==0);
|
||||||
|
json_object_put(tmp);
|
||||||
|
printf("STRING PASSED\n");
|
||||||
|
|
||||||
|
|
||||||
|
printf("PASSED\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
6
tests/test_set_value.expected
Normal file
6
tests/test_set_value.expected
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
INT PASSED
|
||||||
|
INT64 PASSED
|
||||||
|
BOOL PASSED
|
||||||
|
DOUBLE PASSED
|
||||||
|
STRING PASSED
|
||||||
|
PASSED
|
||||||
12
tests/test_set_value.test
Executable file
12
tests/test_set_value.test
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Common definitions
|
||||||
|
if test -z "$srcdir"; then
|
||||||
|
srcdir="${0%/*}"
|
||||||
|
test "$srcdir" = "$0" && srcdir=.
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
fi
|
||||||
|
. "$srcdir/test-defs.sh"
|
||||||
|
|
||||||
|
run_output_test test_set_value
|
||||||
|
exit $?
|
||||||
Reference in New Issue
Block a user