diff --git a/src/util/virjson.c b/src/util/virjson.c index 17b11f2b3d..14b68b8c93 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -1208,6 +1208,33 @@ virJSONValueObjectGetString(virJSONValuePtr object, } +/** + * virJSONValueObjectGetStringOrNumber: + * @object: JSON value object + * @key: name of the property in @object to get + * + * Gets a property named @key from the JSON object @object. The value may be + * a number or a string and is returned as a string. In cases when the property + * is not present or is not a string or number NULL is returned. + */ +const char * +virJSONValueObjectGetStringOrNumber(virJSONValuePtr object, + const char *key) +{ + virJSONValuePtr val = virJSONValueObjectGet(object, key); + + if (!val) + return NULL; + + if (val->type == VIR_JSON_TYPE_STRING) + return val->data.string; + else if (val->type == VIR_JSON_TYPE_NUMBER) + return val->data.number; + + return NULL; +} + + int virJSONValueObjectGetNumberInt(virJSONValuePtr object, const char *key, diff --git a/src/util/virjson.h b/src/util/virjson.h index e89a776ab5..b76a3c3472 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -149,6 +149,7 @@ virJSONValuePtr virJSONValueObjectStealArray(virJSONValuePtr object, const char *key); const char *virJSONValueObjectGetString(virJSONValuePtr object, const char *key); +const char *virJSONValueObjectGetStringOrNumber(virJSONValuePtr object, const char *key); int virJSONValueObjectGetNumberInt(virJSONValuePtr object, const char *key, int *value); int virJSONValueObjectGetNumberUint(virJSONValuePtr object, const char *key, unsigned int *value); int virJSONValueObjectGetNumberLong(virJSONValuePtr object, const char *key, long long *value);