json_print: Add new json object function not as array item

Currently new json object opens (and delete_json_obj closes) the object as
an array, what adds prints for the matching bracket '[' ']' at the
start/end of the object. This patch adds new_json_obj_plain() and the
matching delete_json_obj_plain() to enable opening and closing json object,
not as array and leave it to the using function to decide which type of
object to open/close as the main object.

Signed-off-by: Ron Diskin <rondi@mellanox.com>
Reviewed-by: Moshe Shemesh <moshe@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
Ron Diskin 2020-01-23 12:32:27 +02:00 committed by Stephen Hemminger
parent 31ca29b2be
commit 98e48e7dd0
2 changed files with 30 additions and 6 deletions

View File

@ -31,6 +31,8 @@ enum output_type {
void new_json_obj(int json);
void delete_json_obj(void);
void new_json_obj_plain(int json);
void delete_json_obj_plain(void);
bool is_json_context(void);

View File

@ -20,7 +20,7 @@ static json_writer_t *_jw;
#define _IS_JSON_CONTEXT(type) ((type & PRINT_JSON || type & PRINT_ANY) && _jw)
#define _IS_FP_CONTEXT(type) (!_jw && (type & PRINT_FP || type & PRINT_ANY))
void new_json_obj(int json)
static void __new_json_obj(int json, bool have_array)
{
if (json) {
_jw = jsonw_new(stdout);
@ -30,16 +30,38 @@ void new_json_obj(int json)
}
if (pretty)
jsonw_pretty(_jw, true);
jsonw_start_array(_jw);
if (have_array)
jsonw_start_array(_jw);
}
}
static void __delete_json_obj(bool have_array)
{
if (_jw) {
if (have_array)
jsonw_end_array(_jw);
jsonw_destroy(&_jw);
}
}
void new_json_obj(int json)
{
__new_json_obj(json, true);
}
void delete_json_obj(void)
{
if (_jw) {
jsonw_end_array(_jw);
jsonw_destroy(&_jw);
}
__delete_json_obj(true);
}
void new_json_obj_plain(int json)
{
__new_json_obj(json, false);
}
void delete_json_obj_plain(void)
{
__delete_json_obj(false);
}
bool is_json_context(void)