123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- * Tests if casting within the json_object_get_* functions work correctly.
- * Also checks the json_object_get_type and json_object_is_type functions.
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "config.h"
- #include "json_inttypes.h"
- #include "json_object.h"
- #include "json_tokener.h"
- #include "json_util.h"
- static void getit(struct json_object *new_obj, const char *field);
- static void checktype_header(void);
- static void checktype(struct json_object *new_obj, const char *field);
- int main(int argc, char **argv)
- {
- const char *input = "{\n\
- \"string_of_digits\": \"123\",\n\
- \"regular_number\": 222,\n\
- \"decimal_number\": 99.55,\n\
- \"boolean_true\": true,\n\
- \"boolean_false\": false,\n\
- \"big_number\": 2147483649,\n\
- \"a_null\": null,\n\
- }";
- /* Note: 2147483649 = INT_MAX + 2 */
- struct json_object *new_obj;
- new_obj = json_tokener_parse(input);
- printf("Parsed input: %s\n", input);
- printf("Result is %s\n", (new_obj == NULL) ? "NULL (error!)" : "not NULL");
- if (!new_obj)
- return 1; // oops, we failed.
- getit(new_obj, "string_of_digits");
- getit(new_obj, "regular_number");
- getit(new_obj, "decimal_number");
- getit(new_obj, "boolean_true");
- getit(new_obj, "boolean_false");
- getit(new_obj, "big_number");
- getit(new_obj, "a_null");
- // Now check the behaviour of the json_object_is_type() function.
- printf("\n================================\n");
- checktype_header();
- checktype(new_obj, NULL);
- checktype(new_obj, "string_of_digits");
- checktype(new_obj, "regular_number");
- checktype(new_obj, "decimal_number");
- checktype(new_obj, "boolean_true");
- checktype(new_obj, "boolean_false");
- checktype(new_obj, "big_number");
- checktype(new_obj, "a_null");
- json_object_put(new_obj);
- return 0;
- }
- static void getit(struct json_object *new_obj, const char *field)
- {
- struct json_object *o = NULL;
- if (!json_object_object_get_ex(new_obj, field, &o))
- printf("Field %s does not exist\n", field);
- enum json_type o_type = json_object_get_type(o);
- printf("new_obj.%s json_object_get_type()=%s\n", field,
- json_type_to_name(o_type));
- printf("new_obj.%s json_object_get_int()=%d\n", field,
- json_object_get_int(o));
- printf("new_obj.%s json_object_get_int64()=%" PRId64 "\n", field,
- json_object_get_int64(o));
- printf("new_obj.%s json_object_get_boolean()=%d\n", field,
- json_object_get_boolean(o));
- printf("new_obj.%s json_object_get_double()=%f\n", field,
- json_object_get_double(o));
- }
- static void checktype_header()
- {
- printf("json_object_is_type: %s,%s,%s,%s,%s,%s,%s\n",
- json_type_to_name(json_type_null),
- json_type_to_name(json_type_boolean),
- json_type_to_name(json_type_double),
- json_type_to_name(json_type_int),
- json_type_to_name(json_type_object),
- json_type_to_name(json_type_array),
- json_type_to_name(json_type_string));
- }
- static void checktype(struct json_object *new_obj, const char *field)
- {
- struct json_object *o = new_obj;
- if (field && !json_object_object_get_ex(new_obj, field, &o))
- printf("Field %s does not exist\n", field);
-
- printf("new_obj%s%-18s: %d,%d,%d,%d,%d,%d,%d\n",
- field ? "." : " ", field ? field : "",
- json_object_is_type(o, json_type_null),
- json_object_is_type(o, json_type_boolean),
- json_object_is_type(o, json_type_double),
- json_object_is_type(o, json_type_int),
- json_object_is_type(o, json_type_object),
- json_object_is_type(o, json_type_array),
- json_object_is_type(o, json_type_string));
- }
|