Browse Source

Export json_object_double_to_json_string() and use custom format string

tags/json-c-0.13-20171207
Jan-Philipp Litza 9 years ago
parent
commit
21dc5dc92b
2 changed files with 34 additions and 6 deletions
  1. +6
    -6
      json_object.c
  2. +28
    -0
      json_object.h

+ 6
- 6
json_object.c View 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) {


+ 28
- 0
json_object.h View 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.


Loading…
Cancel
Save