@@ -306,7 +306,9 @@ int main(int argc, char **argv) | |||||
printf("my_object=\n"); | printf("my_object=\n"); | ||||
json_object_object_foreach(my_object, key, val) | json_object_object_foreach(my_object, key, val) | ||||
{ | { | ||||
printf("\t%s: %s\n", key, json_object_to_json_string(val)); | |||||
putchar('\t'); | |||||
lh_string_print(key, stdout); | |||||
printf(": %s\n", json_object_to_json_string(val)); | |||||
} | } | ||||
printf("my_object.to_string()=%s\n", json_object_to_json_string(my_object)); | printf("my_object.to_string()=%s\n", json_object_to_json_string(my_object)); | ||||
@@ -24,10 +24,11 @@ int main(int argc, char **argv) | |||||
int orig_count = 0; | int orig_count = 0; | ||||
json_object_object_foreach(my_object, key0, val0) | json_object_object_foreach(my_object, key0, val0) | ||||
{ | { | ||||
printf("Key at index %d is [%s] %d", orig_count, key0, (val0 == NULL)); | |||||
if (strcmp(key0, "deleteme") == 0) | |||||
printf("Key at index %d is [%s] %d", orig_count, lh_string_data(key0), | |||||
(val0 == NULL)); | |||||
if (strcmp(lh_string_data(key0), "deleteme") == 0) | |||||
{ | { | ||||
json_object_object_del(my_object, key0); | |||||
json_object_object_del(my_object, lh_string_data(key0)); | |||||
printf(" (deleted)\n"); | printf(" (deleted)\n"); | ||||
} | } | ||||
else | else | ||||
@@ -37,17 +38,19 @@ int main(int argc, char **argv) | |||||
printf("==== replace-value first loop starting ====\n"); | printf("==== replace-value first loop starting ====\n"); | ||||
const char *original_key = NULL; | |||||
const struct lh_string *original_key = NULL; | |||||
orig_count = 0; | orig_count = 0; | ||||
json_object_object_foreach(my_object, key, val) | json_object_object_foreach(my_object, key, val) | ||||
{ | { | ||||
printf("Key at index %d is [%s] %d\n", orig_count, key, (val == NULL)); | |||||
printf("Key at index %d is [%s] %d\n", orig_count, lh_string_data(key), | |||||
(val == NULL)); | |||||
orig_count++; | orig_count++; | ||||
if (strcmp(key, "foo2") != 0) | |||||
if (strcmp(lh_string_data(key), "foo2") != 0) | |||||
continue; | continue; | ||||
printf("replacing value for key [%s]\n", key); | |||||
printf("replacing value for key [%s]\n", lh_string_data(key)); | |||||
original_key = key; | original_key = key; | ||||
json_object_object_add(my_object, key, json_object_new_string("zzz")); | |||||
json_object_object_add(my_object, lh_string_data(key0), | |||||
json_object_new_string("zzz")); | |||||
} | } | ||||
printf("==== second loop starting ====\n"); | printf("==== second loop starting ====\n"); | ||||
@@ -56,11 +59,12 @@ int main(int argc, char **argv) | |||||
int retval = 0; | int retval = 0; | ||||
json_object_object_foreach(my_object, key2, val2) | json_object_object_foreach(my_object, key2, val2) | ||||
{ | { | ||||
printf("Key at index %d is [%s] %d\n", new_count, key2, (val2 == NULL)); | |||||
printf("Key at index %d is [%s] %d\n", new_count, lh_string_data(key2), | |||||
(val2 == NULL)); | |||||
new_count++; | new_count++; | ||||
if (strcmp(key2, "foo2") != 0) | |||||
if (strcmp(lh_string_data(key2), "foo2") != 0) | |||||
continue; | continue; | ||||
printf("pointer for key [%s] does %smatch\n", key2, | |||||
printf("pointer for key [%s] does %smatch\n", lh_string_data(key2), | |||||
(key2 == original_key) ? "" : "NOT "); | (key2 == original_key) ? "" : "NOT "); | ||||
if (key2 != original_key) | if (key2 != original_key) | ||||
retval = 1; | retval = 1; | ||||
@@ -93,14 +93,14 @@ int my_custom_serializer(struct json_object *jso, struct printbuf *pb, int level | |||||
} | } | ||||
json_c_shallow_copy_fn my_shallow_copy; | json_c_shallow_copy_fn my_shallow_copy; | ||||
int my_shallow_copy(json_object *src, json_object *parent, const char *key, size_t index, | |||||
json_object **dst) | |||||
int my_shallow_copy(json_object *src, json_object *parent, const struct lh_string *key, | |||||
size_t index, json_object **dst) | |||||
{ | { | ||||
int rc; | int rc; | ||||
rc = json_c_shallow_copy_default(src, parent, key, index, dst); | rc = json_c_shallow_copy_default(src, parent, key, index, dst); | ||||
if (rc < 0) | if (rc < 0) | ||||
return rc; | return rc; | ||||
if (key != NULL && strcmp(key, "with_serializer") == 0) | |||||
if (key != NULL && strcmp(lh_string_data(key), "with_serializer") == 0) | |||||
{ | { | ||||
printf("CALLED: my_shallow_copy on with_serializer object\n"); | printf("CALLED: my_shallow_copy on with_serializer object\n"); | ||||
void *userdata = json_object_get_userdata(src); | void *userdata = json_object_get_userdata(src); | ||||
@@ -9,6 +9,7 @@ | |||||
#include "json_inttypes.h" | #include "json_inttypes.h" | ||||
#include "json_object.h" | #include "json_object.h" | ||||
#include "json_tokener.h" | #include "json_tokener.h" | ||||
#include "linkhash.h" | |||||
int main(void) | int main(void) | ||||
{ | { | ||||
@@ -65,10 +66,33 @@ int main(void) | |||||
return 1; | return 1; | ||||
} | } | ||||
// Check the previous keys are still the same present | |||||
struct json_object *foo = json_object_object_get(parsed, foo_key); | |||||
if (!json_object_is_type(foo, json_type_double)) | |||||
{ | |||||
printf("Key \"%s\" should be `json_type_double` (%d) but was %d (error!)\n", | |||||
foo_key, (int)json_type_double, json_object_get_type(foo)); | |||||
return 1; | |||||
} | |||||
else | |||||
{ | |||||
printf("Key \"%s\" parsed as right type\n", foo_key); | |||||
} | |||||
struct json_object *bar = json_object_object_get(parsed, bar_key); | |||||
if (!json_object_is_type(bar, json_type_array)) | |||||
{ | |||||
printf("Key \"%s\" should be `json_type_array` (%d) but was %d (error!)\n", bar_key, | |||||
(int)json_type_array, json_object_get_type(bar)); | |||||
return 1; | |||||
} | |||||
else | |||||
{ | |||||
printf("Key \"%s\" parsed as right type\n", bar_key); | |||||
} | |||||
// Add the new key | // Add the new key | ||||
struct json_object *new_str = json_object_new_string_len(toadd_value, toadd_value_len); | struct json_object *new_str = json_object_new_string_len(toadd_value, toadd_value_len); | ||||
if (json_object_object_add_ex(parsed, toadd_key, new_str, | |||||
JSON_C_OBJECT_ADD_KEY_IS_NEW | | |||||
if (json_object_object_add_ex_len(parsed, toadd_key, toadd_key_len, new_str, | |||||
JSON_C_OBJECT_KEY_IS_CONSTANT) != 0) | JSON_C_OBJECT_KEY_IS_CONSTANT) != 0) | ||||
{ | { | ||||
printf("An error occured adding the key \"%s\" (error!)\n", toadd_key_printable); | printf("An error occured adding the key \"%s\" (error!)\n", toadd_key_printable); | ||||
@@ -86,6 +110,13 @@ int main(void) | |||||
{ | { | ||||
printf("Have three keys, but don't have the right value in \"%s\" (error!)\n", | printf("Have three keys, but don't have the right value in \"%s\" (error!)\n", | ||||
toadd_key_printable); | toadd_key_printable); | ||||
printf("Keys :\n"); | |||||
json_object_object_foreach(parsed, key, val) | |||||
{ | |||||
putchar('\"'); | |||||
fwrite(lh_string_data(key), lh_string_size(key), 1, stdout); | |||||
printf("\" (%zd)\n", lh_string_size(key)); | |||||
} | |||||
return 1; | return 1; | ||||
} | } | ||||
else | else | ||||
@@ -94,7 +125,7 @@ int main(void) | |||||
} | } | ||||
// Check the previous keys are still the same present | // Check the previous keys are still the same present | ||||
struct json_object *foo = json_object_object_get(parsed, foo_key); | |||||
foo = json_object_object_get(parsed, foo_key); | |||||
if (!json_object_is_type(foo, json_type_double)) | if (!json_object_is_type(foo, json_type_double)) | ||||
{ | { | ||||
printf("Key \"%s\" should be `json_type_double` (%d) but was %d (error!)\n", | printf("Key \"%s\" should be `json_type_double` (%d) but was %d (error!)\n", | ||||
@@ -105,11 +136,11 @@ int main(void) | |||||
{ | { | ||||
printf("Key \"%s\" is still the same\n", foo_key); | printf("Key \"%s\" is still the same\n", foo_key); | ||||
} | } | ||||
struct json_object *bar = json_object_object_get(parsed, bar_key); | |||||
if (!json_object_is_type(foo, json_type_array)) | |||||
bar = json_object_object_get(parsed, bar_key); | |||||
if (!json_object_is_type(bar, json_type_array)) | |||||
{ | { | ||||
printf("Key \"%s\" should be `json_type_array` (%d) but was %d (error!)\n", bar_key, | printf("Key \"%s\" should be `json_type_array` (%d) but was %d (error!)\n", bar_key, | ||||
(int)json_type_array, json_object_get_type(foo)); | |||||
(int)json_type_array, json_object_get_type(bar)); | |||||
return 1; | return 1; | ||||
} | } | ||||
else | else | ||||
@@ -1,5 +1,7 @@ | |||||
Parsed input: { "foo": 14.5, "bar": [] } | Parsed input: { "foo": 14.5, "bar": [] } | ||||
Result is `json_type_object` | Result is `json_type_object` | ||||
Key "foo" parsed as right type | |||||
Key "bar" parsed as right type | |||||
Added the key "foo\0bar" successfully | Added the key "foo\0bar" successfully | ||||
Key "foo" is still the same | Key "foo" is still the same | ||||
Key "bar" is still the same | Key "bar" is still the same | ||||
@@ -6,6 +6,7 @@ | |||||
#include "json_object.h" | #include "json_object.h" | ||||
#include "json_object_iterator.h" | #include "json_object_iterator.h" | ||||
#include "json_tokener.h" | #include "json_tokener.h" | ||||
#include "linkhash.h" | |||||
int main(int atgc, char **argv) | int main(int atgc, char **argv) | ||||
{ | { | ||||
@@ -30,7 +31,7 @@ int main(int atgc, char **argv) | |||||
while (!json_object_iter_equal(&it, &itEnd)) | while (!json_object_iter_equal(&it, &itEnd)) | ||||
{ | { | ||||
printf("%s\n", json_object_iter_peek_name(&it)); | |||||
printf("%s\n", lh_string_data(json_object_iter_peek_name(&it))); | |||||
printf("%s\n", json_object_to_json_string(json_object_iter_peek_value(&it))); | printf("%s\n", json_object_to_json_string(json_object_iter_peek_value(&it))); | ||||
json_object_iter_next(&it); | json_object_iter_next(&it); | ||||
} | } | ||||
@@ -215,7 +215,7 @@ static void do_clear_serializer(json_object *jso) | |||||
} | } | ||||
static int clear_serializer(json_object *jso, int flags, json_object *parent_jso, | static int clear_serializer(json_object *jso, int flags, json_object *parent_jso, | ||||
const char *jso_key, size_t *jso_index, void *userarg) | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
if (jso) | if (jso) | ||||
json_object_set_serializer(jso, NULL, NULL, NULL); | json_object_set_serializer(jso, NULL, NULL, NULL); | ||||
@@ -68,17 +68,17 @@ int main(void) | |||||
return 0; | return 0; | ||||
} | } | ||||
static int emit_object(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int emit_object(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
printf("flags: 0x%x, key: %s, index: %ld, value: %s\n", flags, | printf("flags: 0x%x, key: %s, index: %ld, value: %s\n", flags, | ||||
(jso_key ? jso_key : "(null)"), (jso_index ? (long)*jso_index : -1L), | |||||
(jso_key ? lh_string_data(jso_key) : "(null)"), (jso_index ? (long)*jso_index : -1L), | |||||
json_object_to_json_string(jso)); | json_object_to_json_string(jso)); | ||||
return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
} | } | ||||
static int skip_arrays(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int skip_arrays(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
(void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | ||||
if (json_object_get_type(jso) == json_type_array) | if (json_object_get_type(jso) == json_type_array) | ||||
@@ -86,16 +86,16 @@ static int skip_arrays(json_object *jso, int flags, json_object *parent_jso, con | |||||
return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
} | } | ||||
static int pop_and_stop(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int pop_and_stop(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
(void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | ||||
if (jso_key != NULL && strcmp(jso_key, "subobj1") == 0) | |||||
if (jso_key != NULL && strcmp(lh_string_data(jso_key), "subobj1") == 0) | |||||
{ | { | ||||
printf("POP after handling subobj1\n"); | printf("POP after handling subobj1\n"); | ||||
return JSON_C_VISIT_RETURN_POP; | return JSON_C_VISIT_RETURN_POP; | ||||
} | } | ||||
if (jso_key != NULL && strcmp(jso_key, "obj3") == 0) | |||||
if (jso_key != NULL && strcmp(lh_string_data(jso_key), "obj3") == 0) | |||||
{ | { | ||||
printf("STOP after handling obj3\n"); | printf("STOP after handling obj3\n"); | ||||
return JSON_C_VISIT_RETURN_STOP; | return JSON_C_VISIT_RETURN_STOP; | ||||
@@ -103,11 +103,11 @@ static int pop_and_stop(json_object *jso, int flags, json_object *parent_jso, co | |||||
return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
} | } | ||||
static int err_on_subobj2(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int err_on_subobj2(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
(void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | ||||
if (jso_key != NULL && strcmp(jso_key, "subobj2") == 0) | |||||
if (jso_key != NULL && strcmp(lh_string_data(jso_key), "subobj2") == 0) | |||||
{ | { | ||||
printf("ERROR after handling subobj1\n"); | printf("ERROR after handling subobj1\n"); | ||||
return JSON_C_VISIT_RETURN_ERROR; | return JSON_C_VISIT_RETURN_ERROR; | ||||
@@ -115,8 +115,8 @@ static int err_on_subobj2(json_object *jso, int flags, json_object *parent_jso, | |||||
return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
} | } | ||||
static int pop_array(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int pop_array(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
(void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | ||||
if (jso_index != NULL && (*jso_index == 0)) | if (jso_index != NULL && (*jso_index == 0)) | ||||
@@ -127,8 +127,8 @@ static int pop_array(json_object *jso, int flags, json_object *parent_jso, const | |||||
return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
} | } | ||||
static int stop_array(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int stop_array(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
(void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | ||||
if (jso_index != NULL && (*jso_index == 0)) | if (jso_index != NULL && (*jso_index == 0)) | ||||
@@ -139,11 +139,11 @@ static int stop_array(json_object *jso, int flags, json_object *parent_jso, cons | |||||
return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
} | } | ||||
static int err_return(json_object *jso, int flags, json_object *parent_jso, const char *jso_key, | |||||
size_t *jso_index, void *userarg) | |||||
static int err_return(json_object *jso, int flags, json_object *parent_jso, | |||||
const struct lh_string *jso_key, size_t *jso_index, void *userarg) | |||||
{ | { | ||||
printf("flags: 0x%x, key: %s, index: %ld, value: %s\n", flags, | printf("flags: 0x%x, key: %s, index: %ld, value: %s\n", flags, | ||||
(jso_key ? jso_key : "(null)"), (jso_index ? (long)*jso_index : -1L), | |||||
(jso_key ? lh_string_data(jso_key) : "(null)"), (jso_index ? (long)*jso_index : -1L), | |||||
json_object_to_json_string(jso)); | json_object_to_json_string(jso)); | ||||
return 100; | return 100; | ||||
} | } |