Lines Matching refs:jso
52 static void json_object_generic_delete(struct json_object* jso);
152 extern struct json_object* json_object_get(struct json_object *jso)
154 if (jso)
155 jso->_ref_count++;
156 return jso;
159 int json_object_put(struct json_object *jso)
161 if(jso)
163 jso->_ref_count--;
164 if(!jso->_ref_count)
166 if (jso->_user_delete)
167 jso->_user_delete(jso, jso->_userdata);
168 jso->_delete(jso);
178 static void json_object_generic_delete(struct json_object* jso)
182 json_type_to_name(jso->o_type), jso);
183 lh_table_delete(json_object_table, jso);
185 printbuf_free(jso->_pb);
186 free(jso);
191 struct json_object *jso;
193 jso = (struct json_object*)calloc(sizeof(struct json_object), 1);
194 if (!jso)
196 jso->o_type = o_type;
197 jso->_ref_count = 1;
198 jso->_delete = &json_object_generic_delete;
200 lh_table_insert(json_object_table, jso, jso);
201 MC_DEBUG("json_object_new_%s: %p\n", json_type_to_name(jso->o_type), jso);
203 return jso;
209 int json_object_is_type(struct json_object *jso, enum json_type type)
211 if (!jso)
213 return (jso->o_type == type);
216 enum json_type json_object_get_type(struct json_object *jso)
218 if (!jso)
220 return jso->o_type;
225 void json_object_set_serializer(json_object *jso,
231 if (jso->_user_delete)
233 jso->_user_delete(jso, jso->_userdata);
235 jso->_userdata = NULL;
236 jso->_user_delete = NULL;
241 switch(jso->o_type)
244 jso->_to_json_string = NULL;
247 jso->_to_json_string = &json_object_boolean_to_json_string;
250 jso->_to_json_string = &json_object_double_to_json_string;
253 jso->_to_json_string = &json_object_int_to_json_string;
256 jso->_to_json_string = &json_object_object_to_json_string;
259 jso->_to_json_string = &json_object_array_to_json_string;
262 jso->_to_json_string = &json_object_string_to_json_string;
268 jso->_to_json_string = to_string_func;
269 jso->_userdata = userdata;
270 jso->_user_delete = user_delete;
276 const char* json_object_to_json_string_ext(struct json_object *jso, int flags)
278 if (!jso)
281 if ((!jso->_pb) && !(jso->_pb = printbuf_new()))
284 printbuf_reset(jso->_pb);
286 if(jso->_to_json_string(jso, jso->_pb, 0, flags) < 0)
289 return jso->_pb->buf;
294 const char* json_object_to_json_string(struct json_object *jso)
296 return json_object_to_json_string_ext(jso, JSON_C_TO_STRING_SPACED);
309 static int json_object_object_to_json_string(struct json_object* jso,
320 json_object_object_foreachC(jso, iter)
362 static void json_object_object_delete(struct json_object* jso)
364 lh_table_free(jso->o.c_object);
365 json_object_generic_delete(jso);
370 struct json_object *jso = json_object_new(json_type_object);
371 if (!jso)
373 jso->_delete = &json_object_object_delete;
374 jso->_to_json_string = &json_object_object_to_json_string;
375 jso->o.c_object = lh_kchar_table_new(JSON_OBJECT_DEF_HASH_ENTRIES,
377 if (!jso->o.c_object)
379 json_object_generic_delete(jso);
383 return jso;
386 struct lh_table* json_object_get_object(struct json_object *jso)
388 if (!jso)
390 switch(jso->o_type)
393 return jso->o.c_object;
399 void json_object_object_add(struct json_object* jso, const char *key,
406 existing_entry = lh_table_lookup_entry(jso->o.c_object, (void*)key);
409 lh_table_insert(jso->o.c_object, strdup(key), val);
418 int json_object_object_length(struct json_object *jso)
420 return lh_table_length(jso->o.c_object);
423 struct json_object* json_object_object_get(struct json_object* jso, const char *key)
426 json_object_object_get_ex(jso, key, &result);
430 json_bool json_object_object_get_ex(struct json_object* jso, const char *key, struct json_object **value)
435 if (NULL == jso)
438 switch(jso->o_type)
441 return lh_table_lookup_ex(jso->o.c_object, (void*)key, (void**)value);
449 void json_object_object_del(struct json_object* jso, const char *key)
451 lh_table_delete(jso->o.c_object, key);
457 static int json_object_boolean_to_json_string(struct json_object* jso,
462 if (jso->o.c_boolean)
470 struct json_object *jso = json_object_new(json_type_boolean);
471 if (!jso)
473 jso->_to_json_string = &json_object_boolean_to_json_string;
474 jso->o.c_boolean = b;
475 return jso;
478 json_bool json_object_get_boolean(struct json_object *jso)
480 if (!jso)
482 switch(jso->o_type)
485 return jso->o.c_boolean;
487 return (jso->o.c_int64 != 0);
489 return (jso->o.c_double != 0);
491 return (jso->o.c_string.len != 0);
500 static int json_object_int_to_json_string(struct json_object* jso,
505 return sprintbuf(pb, "%"PRId64, jso->o.c_int64);
510 struct json_object *jso = json_object_new(json_type_int);
511 if (!jso)
513 jso->_to_json_string = &json_object_int_to_json_string;
514 jso->o.c_int64 = i;
515 return jso;
518 int32_t json_object_get_int(struct json_object *jso)
523 if(!jso) return 0;
525 o_type = jso->o_type;
526 cint64 = jso->o.c_int64;
534 if (json_parse_int64(jso->o.c_string.str, &cint64) != 0)
549 return (int32_t)jso->o.c_double;
551 return jso->o.c_boolean;
559 struct json_object *jso = json_object_new(json_type_int);
560 if (!jso)
562 jso->_to_json_string = &json_object_int_to_json_string;
563 jso->o.c_int64 = i;
564 return jso;
567 int64_t json_object_get_int64(struct json_object *jso)
571 if (!jso)
573 switch(jso->o_type)
576 return jso->o.c_int64;
578 return (int64_t)jso->o.c_double;
580 return jso->o.c_boolean;
582 if (json_parse_int64(jso->o.c_string.str, &cint) == 0)
592 static int json_object_double_to_json_string(struct json_object* jso,
603 if(isnan(jso->o.c_double))
605 else if(isinf(jso->o.c_double))
606 if(jso->o.c_double > 0)
611 size = snprintf(buf, sizeof(buf), "%.17g", jso->o.c_double);
635 struct json_object *jso = json_object_new(json_type_double);
636 if (!jso)
638 jso->_to_json_string = &json_object_double_to_json_string;
639 jso->o.c_double = d;
640 return jso;
645 struct json_object *jso = json_object_new_double(d);
646 if (!jso)
652 json_object_generic_delete(jso);
656 json_object_set_serializer(jso, json_object_userdata_to_json_string,
658 return jso;
661 int json_object_userdata_to_json_string(struct json_object *jso,
664 int userdata_len = strlen(jso->_userdata);
665 printbuf_memappend(pb, jso->_userdata, userdata_len);
669 void json_object_free_userdata(struct json_object *jso, void *userdata)
674 double json_object_get_double(struct json_object *jso)
679 if(!jso) return 0.0;
680 switch(jso->o_type) {
682 return jso->o.c_double;
684 return jso->o.c_int64;
686 return jso->o.c_boolean;
689 cdouble = strtod(jso->o.c_string.str,&errPtr);
692 if (errPtr == jso->o.c_string.str)
726 static int json_object_string_to_json_string(struct json_object* jso,
732 json_escape_str(pb, jso->o.c_string.str, jso->o.c_string.len);
737 static void json_object_string_delete(struct json_object* jso)
739 free(jso->o.c_string.str);
740 json_object_generic_delete(jso);
745 struct json_object *jso = json_object_new(json_type_string);
746 if (!jso)
748 jso->_delete = &json_object_string_delete;
749 jso->_to_json_string = &json_object_string_to_json_string;
750 jso->o.c_string.str = strdup(s);
751 if (!jso->o.c_string.str)
753 json_object_generic_delete(jso);
757 jso->o.c_string.len = strlen(s);
758 return jso;
763 struct json_object *jso = json_object_new(json_type_string);
764 if (!jso)
766 jso->_delete = &json_object_string_delete;
767 jso->_to_json_string = &json_object_string_to_json_string;
768 jso->o.c_string.str = (char*)malloc(len + 1);
769 if (!jso->o.c_string.str)
771 json_object_generic_delete(jso);
775 memcpy(jso->o.c_string.str, (void *)s, len);
776 jso->o.c_string.str[len] = '\0';
777 jso->o.c_string.len = len;
778 return jso;
781 const char* json_object_get_string(struct json_object *jso)
783 if (!jso)
785 switch(jso->o_type)
788 return jso->o.c_string.str;
790 return json_object_to_json_string(jso);
794 int json_object_get_string_len(struct json_object *jso)
796 if (!jso)
798 switch(jso->o_type)
801 return jso->o.c_string.len;
810 static int json_object_array_to_json_string(struct json_object* jso,
820 for(ii=0; ii < json_object_array_length(jso); ii++)
833 val = json_object_array_get_idx(jso, ii);
857 static void json_object_array_delete(struct json_object* jso)
859 array_list_free(jso->o.c_array);
860 json_object_generic_delete(jso);
865 struct json_object *jso = json_object_new(json_type_array);
866 if (!jso)
868 jso->_delete = &json_object_array_delete;
869 jso->_to_json_string = &json_object_array_to_json_string;
870 jso->o.c_array = array_list_new(&json_object_array_entry_free);
871 return jso;
874 struct array_list* json_object_get_array(struct json_object *jso)
876 if (!jso)
878 switch(jso->o_type)
881 return jso->o.c_array;
887 void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *))
889 array_list_sort(jso->o.c_array, sort_fn);
892 int json_object_array_length(struct json_object *jso)
894 return array_list_length(jso->o.c_array);
897 int json_object_array_add(struct json_object *jso,struct json_object *val)
899 return array_list_add(jso->o.c_array, val);
902 int json_object_array_put_idx(struct json_object *jso, int idx,
905 return array_list_put_idx(jso->o.c_array, idx, val);
908 struct json_object* json_object_array_get_idx(struct json_object *jso,
911 return (struct json_object*)array_list_get_idx(jso->o.c_array, idx);