/* extended conversion to string */
-const char* json_object_to_json_string_ext(struct json_object *jso, int flags)
+const char* json_object_to_json_string_length(struct json_object *jso, int flags, size_t *length)
{
- if (!jso)
- return "null";
+ const char *r = NULL;
+ size_t s = 0;
- if ((!jso->_pb) && !(jso->_pb = printbuf_new()))
- return NULL;
+ if (!jso)
+ {
+ s = 4;
+ r = "null";
+ }
+ else if ((jso->_pb) || (jso->_pb = printbuf_new()))
+ {
+ printbuf_reset(jso->_pb);
- printbuf_reset(jso->_pb);
+ if(jso->_to_json_string(jso, jso->_pb, 0, flags) >= 0)
+ {
+ s = (size_t)jso->_pb->bpos;
+ r = jso->_pb->buf;
+ }
+ }
- if(jso->_to_json_string(jso, jso->_pb, 0, flags) < 0)
- return NULL;
+ if (length)
+ *length = s;
+ return r;
+}
- return jso->_pb->buf;
+const char* json_object_to_json_string_ext(struct json_object *jso, int flags)
+{
+ return json_object_to_json_string_length(jso, flags, NULL);
}
/* backwards-compatible conversion to string */
extern const char* json_object_to_json_string_ext(struct json_object *obj, int
flags);
+/** Stringify object to json format
+ * @see json_object_to_json_string() for details on how to free string.
+ * @param obj the json_object instance
+ * @param flags formatting options, see JSON_C_TO_STRING_PRETTY and other constants
+ * @param length a pointer where, if not NULL, the length (without null) is stored
+ * @returns a string in JSON format and the length if not NULL
+ */
+extern const char* json_object_to_json_string_length(struct json_object *obj, int
+flags, size_t *length);
+
/**
* Returns the userdata set by json_object_set_userdata() or
* json_object_set_serializer()