parent
249629b9c4
commit
e78fb60937
@ -0,0 +1,91 @@ |
|||||||
|
From 21dc5dc92bd56f5f4dc2c90b9ea6bf1e1407714e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan-Philipp Litza <janphilipp@litza.de>
|
||||||
|
Date: Fri, 6 May 2016 16:12:44 +0200
|
||||||
|
Subject: [PATCH] Export json_object_double_to_json_string() and use custom
|
||||||
|
format string
|
||||||
|
BCC: janphilipp@litza.de
|
||||||
|
|
||||||
|
---
|
||||||
|
json_object.c | 12 ++++++------
|
||||||
|
json_object.h | 28 ++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 34 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
--- a/json_object.c
|
||||||
|
+++ b/json_object.c
|
||||||
|
@@ -55,7 +55,6 @@ static struct json_object* json_object_n
|
||||||
|
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;
|
||||||
|
|
||||||
|
@@ -560,10 +559,10 @@ int64_t json_object_get_int64(struct 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;
|
||||||
|
@@ -579,7 +578,8 @@ static int json_object_double_to_json_st
|
||||||
|
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) {
|
||||||
|
--- a/json_object.h
|
||||||
|
+++ b/json_object.h
|
||||||
|
@@ -515,6 +515,9 @@ extern int64_t json_object_get_int64(str
|
||||||
|
/* 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
|
||||||
|
*/
|
||||||
|
@@ -543,6 +546,31 @@ extern struct json_object* json_object_n
|
||||||
|
*/
|
||||||
|
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.
|
Loading…
Reference in new issue