json-c uses the json_object structure to store a json representation. This structure is marked typedef but I will always write struct, for clarity’s sake.

2 functions exist to print the json_object structures:

const char * json_object_to_json_string(struct json_object *obj);
const char * json_object_to_json_string_ext(struct json_object *obj, int flags);

json_object_to_json_string(obj) is in fact a call to json_object_to_json_string_ext(obj, JSON_C_TO_STRING_SPACED).

The flag attribute of json_object_to_json_string_ext() are:

  • JSON_C_TO_STRING_PLAIN
  • JSON_C_TO_STRING_SPACED
  • JSON_C_TO_STRING_PRETTY
  • JSON_C_TO_STRING_NOZERO

Those flags can be combined using the | operator.

Example’s source code:

Example’s output:

$ ./json_print
Using printf(): "Mum, clouds hide alien spaceships don't they ?", "Of course not! ("sigh")"

Using json_object_to_json_string_ext():

Flag JSON_C_TO_STRING_PLAIN:
---
{"question":"Mum, clouds hide alien spaceships don't they ?","answer":"Of course not! (\"sigh\")"}
---

Flag JSON_C_TO_STRING_SPACED:
---
{ "question": "Mum, clouds hide alien spaceships don't they ?", "answer": "Of course not! (\"sigh\")" }
---

Flag JSON_C_TO_STRING_PRETTY:
---
{
  "question":"Mum, clouds hide alien spaceships don't they ?",
  "answer":"Of course not! (\"sigh\")"
}
---

Flag JSON_C_TO_STRING_NOZERO:
---
{"question":"Mum, clouds hide alien spaceships don't they ?","answer":"Of course not! (\"sigh\")"}
---

Flag JSON_C_TO_STRING_SPACED | JSON_C_TO_STRING_PRETTY:
---
{
   "question": "Mum, clouds hide alien spaceships don't they ?",
   "answer": "Of course not! (\"sigh\")"
 }
---

One thing worth noting, the " character is escaped for security reasons.


Outline / Next