4 * Copyright Alexander Graf
7 * Alexander Graf <agraf@suse.de>
9 * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10 * See the COPYING.LIB file in the top-level directory.
15 * Type QJSON lets you build JSON text. Its interface mirrors (a
16 * subset of) abstract JSON syntax.
18 * It does *not* detect incorrect use. It happily produces invalid
19 * JSON then. This is what migration wants.
21 * QAPI output visitors also produce JSON text. However, they do
22 * assert their preconditions and invariants, and therefore abort on
26 #include "qemu/osdep.h"
27 #include "qapi/qmp/qstring.h"
28 #include "migration/qjson.h"
35 static void json_emit_element(QJSON
*json
, const char *name
)
37 /* Check whether we need to print a , before an element */
38 if (json
->omit_comma
) {
39 json
->omit_comma
= false;
41 qstring_append(json
->str
, ", ");
45 qstring_append(json
->str
, "\"");
46 qstring_append(json
->str
, name
);
47 qstring_append(json
->str
, "\" : ");
51 void json_start_object(QJSON
*json
, const char *name
)
53 json_emit_element(json
, name
);
54 qstring_append(json
->str
, "{ ");
55 json
->omit_comma
= true;
58 void json_end_object(QJSON
*json
)
60 qstring_append(json
->str
, " }");
61 json
->omit_comma
= false;
64 void json_start_array(QJSON
*json
, const char *name
)
66 json_emit_element(json
, name
);
67 qstring_append(json
->str
, "[ ");
68 json
->omit_comma
= true;
71 void json_end_array(QJSON
*json
)
73 qstring_append(json
->str
, " ]");
74 json
->omit_comma
= false;
77 void json_prop_int(QJSON
*json
, const char *name
, int64_t val
)
79 json_emit_element(json
, name
);
80 qstring_append_int(json
->str
, val
);
83 void json_prop_str(QJSON
*json
, const char *name
, const char *str
)
85 json_emit_element(json
, name
);
86 qstring_append_chr(json
->str
, '"');
87 qstring_append(json
->str
, str
);
88 qstring_append_chr(json
->str
, '"');
91 const char *qjson_get_str(QJSON
*json
)
93 return qstring_get_str(json
->str
);
96 QJSON
*qjson_new(void)
98 QJSON
*json
= g_new0(QJSON
, 1);
100 json
->str
= qstring_from_str("{ ");
101 json
->omit_comma
= true;
105 void qjson_finish(QJSON
*json
)
107 json_end_object(json
);
110 void qjson_destroy(QJSON
*json
)