mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
util: json: introduce virJSONStringPrettifyBlanks
A horribly named function for unifying formatting when pretty-printing empty JSON arrays and objects. Useful for having stable test output even if different JSON libraries format these differently. Signed-off-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
e14a5fcac4
commit
330cf7f492
@ -2613,6 +2613,7 @@ virISCSIScanTargets;
|
||||
|
||||
|
||||
# util/virjson.h
|
||||
virJSONStringPrettifyBlanks;
|
||||
virJSONStringReformat;
|
||||
virJSONValueArrayAppend;
|
||||
virJSONValueArrayAppendString;
|
||||
|
@ -1861,6 +1861,40 @@ virJSONStringReformat(const char *jsonstr,
|
||||
return virJSONValueToString(json, pretty);
|
||||
}
|
||||
|
||||
/**
|
||||
* virJSONStringPrettifyBlanks:
|
||||
* @jsonstr: string to prettify
|
||||
*
|
||||
* In the pretty mode of printing, various versions of JSON libraries
|
||||
* format empty arrays and objects differently.
|
||||
*
|
||||
* Unify this to "[]" and "{}" which are used by json-c 0.17 and newer.
|
||||
* https://github.com/json-c/json-c/issues/778
|
||||
*
|
||||
* This format is also used by Python's 'json.dump' method.
|
||||
*
|
||||
* Returns the reformatted JSON string on success.
|
||||
*/
|
||||
char *virJSONStringPrettifyBlanks(const char *jsonstr)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
const char *p;
|
||||
|
||||
for (p = jsonstr; *p && p[1]; p++) {
|
||||
virBufferAddChar(&buf, *p);
|
||||
|
||||
if ((p[0] == '{' || p[0] == '[') && p[1] == '\n') {
|
||||
const char *q = p + 1;
|
||||
|
||||
virSkipSpaces(&q);
|
||||
|
||||
if (*q == '}' || *q == ']')
|
||||
p = q - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
|
||||
static virJSONValue *
|
||||
virJSONValueObjectDeflattenKeys(virJSONValue *json);
|
||||
|
@ -271,6 +271,8 @@ virJSONValueCopy(const virJSONValue *in);
|
||||
char *
|
||||
virJSONStringReformat(const char *jsonstr,
|
||||
bool pretty);
|
||||
char *
|
||||
virJSONStringPrettifyBlanks(const char *jsonstr);
|
||||
|
||||
virJSONValue *
|
||||
virJSONValueObjectDeflatten(virJSONValue *json);
|
||||
|
Loading…
Reference in New Issue
Block a user