MACSio  0.9
Multi-purpose, Application-Centric, Scalable I/O Proxy App
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
json_object.h
Go to the documentation of this file.
1 /*
2  * $Id: json_object.h,v 1.12 2006/01/30 23:07:57 mclark Exp $
3  *
4  * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
5  * Michael Clark <michael@metaparadigm.com>
6  * Copyright (c) 2009 Hewlett-Packard Development Company, L.P.
7  *
8  * This library is free software; you can redistribute it and/or modify
9  * it under the terms of the MIT license. See COPYING for details.
10  *
11  */
12 
13 #ifndef _json_object_h_
14 #define _json_object_h_
15 
16 #ifdef __GNUC__
17 #define THIS_FUNCTION_IS_DEPRECATED(func) func __attribute__ ((deprecated))
18 #elif defined(_MSC_VER)
19 #define THIS_FUNCTION_IS_DEPRECATED(func) __declspec(deprecated) func
20 #else
21 #define THIS_FUNCTION_IS_DEPRECATED(func) func
22 #endif
23 
24 #include "json_inttypes.h"
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
33 #define JSON_OBJECT_DEF_HASH_ENTRIES 16
34 
40 #define JSON_C_TO_STRING_PLAIN 0
41 
46 #define JSON_C_TO_STRING_SPACED (1<<0)
47 
55 #define JSON_C_TO_STRING_PRETTY (1<<1)
56 
59 #define JSON_C_TO_STRING_NOZERO (1<<2)
60 #define JSON_C_TO_STRING_UNQUOTED (1<<3)
61 
62 #define JSON_C_TO_STRING_NO_EXTARR_VALS (1<<4)
63 
64 #define JSON_C_FALSE ((json_bool)0)
65 #define JSON_C_TRUE ((json_bool)1)
66 
67 extern const char *json_number_chars;
68 extern const char *json_hex_chars;
69 
70 /* CAW: added for ANSI C iteration correctness */
72 {
73  char *key;
74  struct json_object *val;
75  struct lh_entry *entry;
76 };
77 
78 /* forward structure definitions */
79 
80 typedef int json_bool;
81 typedef struct printbuf printbuf;
82 typedef struct lh_table lh_table;
83 typedef struct array_list array_list;
84 typedef struct json_object json_object;
86 typedef struct json_tokener json_tokener;
87 
94 typedef void (json_object_delete_fn)(struct json_object *jso, void *userdata);
95 
99 typedef int (json_object_to_json_string_fn)(struct json_object *jso,
100  struct printbuf *pb,
101  int level,
102  int flags);
105 /* supported object types */
106 
107 typedef enum json_type {
108  /* If you change this, be sure to update json_type_to_name() too */
118 } json_type;
119 
120 typedef enum json_extarr_type {
129 
139 extern struct json_object* json_object_get(struct json_object *obj);
140 
149 int json_object_put(struct json_object *obj);
167 extern int json_object_is_type(struct json_object *obj, enum json_type type);
168 
183 extern enum json_type json_object_get_type(struct json_object *obj);
194 extern const char* json_object_to_json_string(struct json_object *obj);
195 
201 extern const char* json_object_to_json_string_ext(struct json_object *obj, int
202 flags);
231 extern void json_object_set_serializer(json_object *jso,
232  json_object_to_json_string_fn to_string_func,
233  void *userdata,
234  json_object_delete_fn *user_delete);
235 
244 
255 
274 extern struct json_object* json_object_new_object(void);
275 
280 extern struct lh_table* json_object_get_object(struct json_object *obj);
281 
285 extern int json_object_object_length(struct json_object* obj);
286 
303 extern void json_object_object_add(struct json_object* obj, const char *key,
304  struct json_object *val);
305 
324  const char *key));
325 
344 extern json_bool json_object_object_get_ex(struct json_object* obj,
345  const char *key,
346  struct json_object **value);
347 
357 extern void json_object_object_del(struct json_object* obj, const char *key);
358 
372 #if defined(__GNUC__) && !defined(__STRICT_ANSI__) && __STDC_VERSION__ >= 199901L
373 
374 # define json_object_object_foreach(obj,key,val) \
375  char *key; \
376  struct json_object *val __attribute__((__unused__)); \
377  for(struct lh_entry *entry ## key = json_object_get_object(obj)->head, *entry_next ## key = NULL; \
378  ({ if(entry ## key) { \
379  key = (char*)entry ## key->k; \
380  val = (struct json_object*)entry ## key->v; \
381  entry_next ## key = entry ## key->next; \
382  } ; entry ## key; }); \
383  entry ## key = entry_next ## key )
384 
385 #else /* ANSI C or MSC */
386 
387 # define json_object_object_foreach(obj,key,val) \
388  char *key;\
389  struct json_object *val; \
390  struct lh_entry *entry ## key; \
391  struct lh_entry *entry_next ## key = NULL; \
392  for(entry ## key = json_object_get_object(obj)->head; \
393  (entry ## key ? ( \
394  key = (char*)entry ## key->k, \
395  val = (struct json_object*)entry ## key->v, \
396  entry_next ## key = entry ## key->next, \
397  entry ## key) : 0); \
398  entry ## key = entry_next ## key)
399 
400 #endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) && __STDC_VERSION__ >= 199901L */
401 
406 #define json_object_object_foreachC(obj,iter) \
407  for(iter.entry = json_object_get_object(obj)->head; (iter.entry ? (iter.key = (char*)iter.entry->k, iter.val = (struct json_object*)iter.entry->v, iter.entry) : 0); iter.entry = iter.entry->next)
408 
416 extern struct json_object* json_object_new_array(void);
417 
422 extern struct array_list* json_object_get_array(struct json_object *obj);
423 
428 extern int json_object_array_length(struct json_object *obj);
429 
438 extern void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *));
439 
449 extern int json_object_array_add(struct json_object *obj,
450  struct json_object *val);
451 
467 extern int json_object_array_put_idx(struct json_object *obj, int idx,
468  struct json_object *val);
469 
475 extern struct json_object* json_object_array_get_idx(struct json_object *obj,
476  int idx);
491 extern struct json_object* json_object_new_boolean(json_bool b);
492 
504 extern json_bool json_object_get_boolean(struct json_object *obj);
516 extern struct json_object* json_object_new_int(int32_t i);
517 
518 
523 extern struct json_object* json_object_new_int64(int64_t i);
524 
525 
540 extern int32_t json_object_get_int(struct json_object *obj);
541 
555 extern int64_t json_object_get_int64(struct json_object *obj);
565 extern struct json_object* json_object_new_double(double d);
566 
588 extern struct json_object* json_object_new_double_s(double d, const char *ds);
589 
613 extern double json_object_get_double(struct json_object *obj);
627 extern struct json_object* json_object_new_string(const char *s);
628 
629 extern struct json_object* json_object_new_string_len(const char *s, int len);
630 
642 extern const char* json_object_get_string(struct json_object *obj);
643 
652 extern int json_object_get_string_len(struct json_object *obj);
657 extern struct json_object* json_object_new_enum(void);
658 extern void json_object_enum_add(struct json_object* jso, char const *name,
659  int64_t val, json_bool selected);
660 extern int json_object_enum_length(struct json_object* jso);
661 extern int json_object_enum_nbytes(struct json_object* jso);
662 extern char const * json_object_enum_get_idx_name(struct json_object* jso, int idx);
663 extern int64_t json_object_enum_get_idx_val(struct json_object* jso, int idx);
664 extern char const * json_object_enum_get_name(struct json_object* jso, int64_t val);
665 extern int64_t json_object_enum_get_val(struct json_object *jso, char const *name);
666 extern char const * json_object_enum_get_choice_name(struct json_object* jso);
667 extern int64_t json_object_enum_get_choice_val(struct json_object* jso);
668 
669 
670 #warning ADD A METHOD TO TRAVERSE A HIERARCHY AND ELIM ALL PRINTBUF STRING MEMORY
671 extern void json_object_free_printbuf(struct json_object *obj);
672 
673 extern struct json_object* json_object_new_extarr(void const *data, enum json_extarr_type type,
674  int ndims, int const *dims);
676  int ndims, int const *dims);
677 extern enum json_extarr_type json_object_extarr_type(struct json_object* jso);
678 extern int json_object_extarr_nvals(struct json_object* jso);
679 extern int json_object_extarr_valsize(struct json_object* jso);
680 extern int64_t json_object_extarr_nbytes(struct json_object* jso);
681 extern int json_object_extarr_ndims(struct json_object* jso);
682 extern int json_object_extarr_dim(struct json_object* jso, int dimidx);
683 extern void const * json_object_extarr_data(struct json_object* jso);
684 extern int json_object_extarr_data_as_unsigned_char(struct json_object* jso, unsigned char **buf);
685 extern int json_object_extarr_data_as_int(struct json_object* jso, int **buf);
686 extern int json_object_extarr_data_as_int64_t(struct json_object* jso, int64_t **buf);
687 extern int json_object_extarr_data_as_float(struct json_object* jso, float **buf);
688 extern int json_object_extarr_data_as_double(struct json_object* jso, double **buf);
689 
690 extern json_bool json_object_path_get_boolean(struct json_object *src, char const *key_path);
691 extern char const * json_object_path_get_enum_choice_name(struct json_object *src, char const *key_path);
692 extern int64_t json_object_path_get_enum_choice_val(struct json_object *src, char const *key_path);
693 extern int32_t json_object_path_get_int(struct json_object *src, char const *key_path);
694 extern int64_t json_object_path_get_int64(struct json_object *src, char const *key_path);
695 extern char const * json_object_path_get_string(struct json_object *src, char const *key_path);
696 extern double json_object_path_get_double(struct json_object *src, char const *key_path);
697 extern struct json_object * json_object_path_get_array(struct json_object *src, char const *key_path);
698 extern struct json_object * json_object_path_get_object(struct json_object *src, char const *key_path);
699 extern struct json_object * json_object_path_get_extarr(struct json_object *src, char const *key_path);
700 extern struct json_object * json_object_path_get_any(struct json_object *src, char const *key_path);
701 
702 extern json_bool json_object_apath_get_boolean(struct json_object *src, char const *key_path);
703 extern int json_object_apath_get_int(struct json_object *src, char const *key_path);
704 extern int64_t json_object_apath_get_int64(struct json_object *src, char const *key_path);
705 extern double json_object_apath_get_double(struct json_object *src, char const *key_path);
706 extern char const * json_object_apath_get_string(struct json_object *src, char const *key_path);
707 extern struct json_object * json_object_apath_get_object(struct json_object *src, char const *key_path);
708 extern struct json_object * json_object_apath_find_object(struct json_object *src, char const *key_path);
709 extern char const * json_paste_apath(char const *va_args_str, char const *first, ...);
710 
741 #define JsonGetBool(OBJ, ...) json_object_apath_get_boolean(OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
742 
747 #define JsonGetInt(OBJ, ...) json_object_apath_get_int( OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
748 
753 #define JsonGetInt64(OBJ, ...) json_object_apath_get_int64( OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
754 
759 #define JsonGetDbl(OBJ, ...) json_object_apath_get_double( OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
760 
765 #define JsonGetStr(OBJ, ...) json_object_apath_get_string( OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
766 
771 #define JsonGetObj(OBJ, ...) json_object_apath_get_object( OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
772 #define JsonFindObj(OBJ, ...) json_object_apath_find_object(OBJ, json_paste_apath(#__VA_ARGS__, __VA_ARGS__))
773 
776 extern json_bool json_object_set_boolean(struct json_object *bool_obj, json_bool val);
777 extern json_bool json_object_set_enum_choice_name(struct json_object *enum_obj, char const *name);
778 extern json_bool json_object_set_enum_choice_val(struct json_object *enum_obj, int64_t val);
779 extern json_bool json_object_set_int(struct json_object *int_obj, int32_t val);
780 extern json_bool json_object_set_int64(struct json_object *int64_obj, int64_t val);
781 extern json_bool json_object_set_double(struct json_object *double_obj, double val);
782 extern json_bool json_object_set_string(struct json_object *string_obj, char const *val);
783 
784 extern json_bool json_object_path_set_boolean(struct json_object *obj, char const *key_path, json_bool val);
786  struct json_object *enum_obj, char const *key_path, char const *val);
787 extern json_bool json_object_path_set_enum_choice_val(
788  struct json_object *enum_obj, char const *key_path, int64_t val);
789 extern json_bool json_object_path_set_int(struct json_object *obj, char const *key_path, int32_t val);
790 extern json_bool json_object_path_set_int64(struct json_object *obj, char const *key_path, int64_t val);
791 extern json_bool json_object_path_set_double(struct json_object *obj, char const *key_path, double val);
792 extern json_bool json_object_path_set_string(struct json_object *obj, char const *key_path, char const *val);
793 
794 extern int64_t json_object_object_nbytes(struct json_object *const obj);
795 
798 #ifdef __cplusplus
799 }
800 #endif
801 
802 #endif
int json_object_enum_nbytes(struct json_object *jso)
json_bool json_object_set_enum_choice_name(struct json_object *enum_obj, char const *name)
Definition: json_object.c:1559
struct json_object * json_object_new_extarr_alloc(enum json_extarr_type etype, int ndims, int const *dims)
Definition: json_object.c:1115
json_bool json_object_path_set_int(struct json_object *obj, char const *key_path, int32_t val)
Definition: json_object.c:2046
json_bool json_object_path_set_double(struct json_object *obj, char const *key_path, double val)
Definition: json_object.c:2060
void json_object_enum_add(struct json_object *jso, char const *name, int64_t val, json_bool selected)
Add a name/value pair to an enumeration.
Definition: json_object.c:1327
void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *))
Definition: json_object.c:849
struct json_object * val
Definition: json_object.h:74
void json_object_object_del(struct json_object *obj, const char *key)
Definition: json_object.c:441
struct json_object * json_object_new_string(const char *s)
Definition: json_object.c:727
int64_t json_object_enum_get_idx_val(struct json_object *jso, int idx)
Get the value of a specific name/value pair in the enumeration.
Definition: json_object.c:1420
int json_object_extarr_valsize(struct json_object *jso)
Definition: json_object.c:1161
#define THIS_FUNCTION_IS_DEPRECATED(func)
Definition: json_object.h:21
json_bool json_object_set_int64(struct json_object *int64_obj, int64_t val)
Definition: json_object.c:1588
char const * json_object_enum_get_idx_name(struct json_object *jso, int idx)
Get the name of a specific name/value pair in the enumeration.
Definition: json_object.c:1377
char const * json_object_path_get_enum_choice_name(struct json_object *src, char const *key_path)
json_bool json_object_apath_get_boolean(struct json_object *src, char const *key_path)
Query boolean value at specified path.
Definition: json_object.c:1702
int64_t json_object_apath_get_int64(struct json_object *src, char const *key_path)
Query int64_t value at specified path.
Definition: json_object.c:1739
json_bool json_object_path_set_boolean(struct json_object *obj, char const *key_path, json_bool val)
Definition: json_object.c:2025
int json_object_object_length(struct json_object *obj)
Definition: json_object.c:410
struct json_object * json_object_new_object(void)
Definition: json_object.c:369
Definition: linkhash.h:62
struct json_object * json_object_path_get_any(struct json_object *src, char const *key_path)
Get object of any type at specified path.
Definition: json_object.c:2265
void const * json_object_extarr_data(struct json_object *jso)
Definition: json_object.c:1206
enum json_type json_object_get_type(struct json_object *obj)
Definition: json_object.c:211
struct json_object * json_object_path_get_extarr(struct json_object *src, char const *key_path)
Get the extarr object at specified path.
Definition: json_object.c:2249
struct lh_table * json_object_get_object(struct json_object *obj)
Definition: json_object.c:380
json_bool json_object_set_boolean(struct json_object *bool_obj, json_bool val)
Definition: json_object.c:1552
json_bool json_object_path_set_string(struct json_object *obj, char const *key_path, char const *val)
Definition: json_object.c:2067
char const * json_paste_apath(char const *va_args_str, char const *first,...)
Helper method to automatically construct paths from values.
Definition: json_object.c:1920
int json_object_is_type(struct json_object *obj, enum json_type type)
Definition: json_object.c:204
int64_t json_object_enum_get_choice_val(struct json_object *jso)
Get chosen value of an enumeration.
Definition: json_object.c:1460
double json_object_apath_get_double(struct json_object *src, char const *key_path)
Query double value at specified path.
Definition: json_object.c:1796
json_bool json_object_object_get_ex(struct json_object *obj, const char *key, struct json_object **value)
Definition: json_object.c:422
char const * json_object_apath_get_string(struct json_object *src, char const *key_path)
Query string value at specified path.
Definition: json_object.c:1852
int64_t json_object_object_nbytes(struct json_object *const obj)
Definition: json_object.c:2295
struct json_object * json_object_new_string_len(const char *s, int len)
Definition: json_object.c:738
int json_object_extarr_data_as_int(struct json_object *jso, int **buf)
json_bool json_object_get_boolean(struct json_object *obj)
Definition: json_object.c:467
int json_object_extarr_data_as_unsigned_char(struct json_object *jso, unsigned char **buf)
int64_t json_object_extarr_nbytes(struct json_object *jso)
Definition: json_object.c:1179
struct json_object * json_object_new_double_s(double d, const char *ds)
Definition: json_object.c:632
const char * json_hex_chars
Definition: json_object.c:53
int json_bool
Definition: json_object.h:80
void json_object_set_serializer(json_object *jso, json_object_to_json_string_fn to_string_func, void *userdata, json_object_delete_fn *user_delete)
Definition: json_object.c:220
struct json_object * json_object_new_int(int32_t i)
Definition: json_object.c:495
void( json_object_delete_fn)(struct json_object *jso, void *userdata)
Definition: json_object.h:94
struct json_object * json_object_object_get(struct json_object *jso, const char *key)
Definition: json_object.c:415
static int sort_fn(const void *j1, const void *j2)
Definition: test1.c:10
int json_object_array_add(struct json_object *obj, struct json_object *val)
Definition: json_object.c:859
int64_t json_object_path_get_int64(struct json_object *src, char const *key_path)
Get int64 value for object at specified path.
Definition: json_object.c:2118
struct lh_entry * entry
Definition: json_object.h:75
json_extarr_type
Definition: json_object.h:120
int json_object_extarr_dim(struct json_object *jso, int dimidx)
Definition: json_object.c:1196
json_object_delete_fn json_object_free_userdata
Definition: json_object.h:243
int json_object_array_length(struct json_object *obj)
Definition: json_object.c:854
struct json_object * json_object_new_int64(int64_t i)
Definition: json_object.c:550
json_bool json_object_set_int(struct json_object *int_obj, int32_t val)
Definition: json_object.c:1581
int json_object_apath_get_int(struct json_object *src, char const *key_path)
Query int value at specified path.
Definition: json_object.c:1782
struct json_object * json_object_new_array(void)
Definition: json_object.c:828
int json_object_extarr_nvals(struct json_object *jso)
Definition: json_object.c:1149
struct json_object * json_object_new_boolean(json_bool b)
Definition: json_object.c:458
int64_t json_object_path_get_enum_choice_val(struct json_object *src, char const *key_path)
int json_object_extarr_ndims(struct json_object *jso)
Definition: json_object.c:1190
int64_t json_object_enum_get_val(struct json_object *jso, char const *name)
Get value of name in an enumeration.
Definition: json_object.c:1441
json_bool json_object_path_set_int64(struct json_object *obj, char const *key_path, int64_t val)
Definition: json_object.c:2053
double json_object_path_get_double(struct json_object *src, char const *key_path)
Get a double value for the object at specified path.
Definition: json_object.c:2140
struct json_object * json_object_path_get_array(struct json_object *src, char const *key_path)
Get the array object at specified path.
Definition: json_object.c:2215
json_bool json_object_path_get_boolean(struct json_object *src, char const *key_path)
Get boolean value for the object at specified path.
Definition: json_object.c:2161
const char * json_object_get_string(struct json_object *obj)
Definition: json_object.c:751
struct json_object * json_object_new_double(double d)
Definition: json_object.c:622
int( json_object_to_json_string_fn)(struct json_object *jso, struct printbuf *pb, int level, int flags)
Definition: json_object.h:99
char const * json_object_path_get_string(struct json_object *src, char const *key_path)
Get a string value for the object at specified path.
Definition: json_object.c:2198
int json_object_extarr_data_as_int64_t(struct json_object *jso, int64_t **buf)
json_bool json_object_path_set_enum_choice_name(struct json_object *enum_obj, char const *key_path, char const *val)
Definition: json_object.c:2039
double json_object_get_double(struct json_object *obj)
Definition: json_object.c:656
json_bool json_object_set_enum_choice_val(struct json_object *enum_obj, int64_t val)
Definition: json_object.c:1574
struct json_object * json_object_new_enum(void)
Create a new, empty enumeration object.
Definition: json_object.c:1305
struct array_list * json_object_get_array(struct json_object *obj)
Definition: json_object.c:838
struct json_object * json_object_array_get_idx(struct json_object *obj, int idx)
Definition: json_object.c:870
json_bool json_object_set_double(struct json_object *double_obj, double val)
Definition: json_object.c:1595
struct json_object * json_object_new_extarr(void const *data, enum json_extarr_type type, int ndims, int const *dims)
Definition: json_object.c:1086
json_bool json_object_path_set_enum_choice_val(struct json_object *enum_obj, char const *key_path, int64_t val)
Definition: json_object.c:2032
struct json_object * json_object_apath_get_object(struct json_object *src, char const *key_path)
Query any object at specified path.
Definition: json_object.c:1872
int json_object_array_put_idx(struct json_object *obj, int idx, struct json_object *val)
Definition: json_object.c:864
struct json_object * json_object_path_get_object(struct json_object *src, char const *key_path)
Get the object at specified path.
Definition: json_object.c:2232
struct json_object * json_object_apath_find_object(struct json_object *src, char const *key_path)
Definition: json_object.c:1879
struct json_object * json_object_get(struct json_object *obj)
Definition: json_object.c:147
int json_object_put(struct json_object *obj)
Definition: json_object.c:155
int64_t json_object_get_int64(struct json_object *obj)
Definition: json_object.c:559
int32_t json_object_get_int(struct json_object *obj)
Definition: json_object.c:504
json_object_to_json_string_fn json_object_userdata_to_json_string
Definition: json_object.h:254
enum json_extarr_type json_object_extarr_type(struct json_object *jso)
Definition: json_object.c:1143
const char * json_object_to_json_string_ext(struct json_object *obj, int flags)
Definition: json_object.c:277
int json_object_extarr_data_as_float(struct json_object *jso, float **buf)
json_bool json_object_set_string(struct json_object *string_obj, char const *val)
Definition: json_object.c:1602
int32_t json_object_path_get_int(struct json_object *src, char const *key_path)
Get integer value for object at specified path.
Definition: json_object.c:2103
int json_object_get_string_len(struct json_object *obj)
Definition: json_object.c:762
char const * json_object_enum_get_choice_name(struct json_object *jso)
Get chosen name of an enumeration.
Definition: json_object.c:1473
const char * json_object_to_json_string(struct json_object *obj)
Definition: json_object.c:295
int json_object_enum_length(struct json_object *jso)
Get the length (or size) of an enumeration.
Definition: json_object.c:1362
void json_object_free_printbuf(struct json_object *obj)
Definition: json_object.c:2288
const char * json_number_chars
Definition: json_object.c:52
char const * json_object_enum_get_name(struct json_object *jso, int64_t val)
Get name of value in an enumeration.
Definition: json_object.c:1398
void json_object_object_add(struct json_object *obj, const char *key, struct json_object *val)
Definition: json_object.c:391
json_type
Definition: json_object.h:107
int json_object_extarr_data_as_double(struct json_object *jso, double **buf)