]> granicus.if.org Git - json-c/commitdiff
Export json_object_double_to_json_string() and use custom format string
authorJan-Philipp Litza <janphilipp@litza.de>
Fri, 6 May 2016 14:12:44 +0000 (16:12 +0200)
committerJan-Philipp Litza <janphilipp@litza.de>
Fri, 6 May 2016 14:12:44 +0000 (16:12 +0200)
json_object.c
json_object.h

index 7d6088488cb3af4ad30fdebd51fc5e3d75091043..46701e7674f623671235c325e2a6a51844b26701 100644 (file)
@@ -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) {
index 2bce454746bd8dcfd8e4f1afe33d6d9247a11181..a89de44df19241d72a7becb3335da00ed23803f4 100644 (file)
@@ -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.