From 21dc5dc92bd56f5f4dc2c90b9ea6bf1e1407714e Mon Sep 17 00:00:00 2001 From: Jan-Philipp Litza Date: Fri, 6 May 2016 16:12:44 +0200 Subject: [PATCH] Export json_object_double_to_json_string() and use custom format string --- json_object.c | 12 ++++++------ json_object.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/json_object.c b/json_object.c index 7d60884..46701e7 100644 --- a/json_object.c +++ b/json_object.c @@ -55,7 +55,6 @@ static struct json_object* json_object_new(enum json_type o_type); static json_object_to_json_string_fn json_object_object_to_json_string; static json_object_to_json_string_fn json_object_boolean_to_json_string; static json_object_to_json_string_fn json_object_int_to_json_string; -static json_object_to_json_string_fn json_object_double_to_json_string; static json_object_to_json_string_fn json_object_string_to_json_string; static json_object_to_json_string_fn json_object_array_to_json_string; @@ -644,10 +643,10 @@ int64_t json_object_get_int64(const struct json_object *jso) /* json_object_double */ -static int json_object_double_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) +int json_object_double_to_json_string(struct json_object* jso, + struct printbuf *pb, + int level, + int flags) { char buf[128], *p, *q; int size; @@ -663,7 +662,8 @@ static int json_object_double_to_json_string(struct json_object* jso, else size = snprintf(buf, sizeof(buf), "-Infinity"); else - size = snprintf(buf, sizeof(buf), "%.17g", jso->o.c_double); + size = snprintf(buf, sizeof(buf), + jso->_userdata ? (const char*) jso->_userdata : "%.17g", jso->o.c_double); p = strchr(buf, ','); if (p) { diff --git a/json_object.h b/json_object.h index 2bce454..a89de44 100644 --- a/json_object.h +++ b/json_object.h @@ -614,6 +614,9 @@ extern int64_t json_object_get_int64(const struct json_object *obj); /* double type methods */ /** Create a new empty json_object of type json_type_double + * + * @see json_object_double_to_json_string() for how to set a custom format string. + * * @param d the double * @returns a json_object of type json_type_double */ @@ -642,6 +645,31 @@ extern struct json_object* json_object_new_double(double d); */ extern struct json_object* json_object_new_double_s(double d, const char *ds); + +/** Serialize a json_object of type json_type_double to a string. + * + * This function isn't meant to be called directly. Instead, you can set a + * custom format string for the serialization of this double using the + * following call (where "%.17g" actually is the default): + * + * @code + * jso = json_object_new_double(d); + * json_object_set_serializer(jso, json_object_double_to_json_string, + * "%.17g", NULL); + * @endcode + * + * @see printf(3) man page for format strings + * + * @param jso The json_type_double object that is serialized. + * @param pb The destination buffer. + * @param level Ignored. + * @param flags Ignored. + */ +extern int json_object_double_to_json_string(struct json_object* jso, + struct printbuf *pb, + int level, + int flags); + /** Get the double floating point value of a json_object * * The type is coerced to a double if the passed object is not a double. -- 2.49.0