From 5133b50372c6b3d8ccc2cf458286404403330bd6 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 16 Jun 2014 15:48:11 +0200 Subject: [PATCH] util: json: Add helpers for manipulating json arrays Add a checker to determine whether a JSON object is an array and a helper to steal objects from a JSON array. --- src/util/virjson.c | 29 +++++++++++++++++++++++++++++ src/util/virjson.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/src/util/virjson.c b/src/util/virjson.c index a5d8daa409..ec83b2fe5f 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -564,6 +564,13 @@ virJSONValueObjectGetValue(virJSONValuePtr object, } +bool +virJSONValueIsArray(virJSONValuePtr array) +{ + return array->type == VIR_JSON_TYPE_ARRAY; +} + + int virJSONValueArraySize(virJSONValuePtr array) { @@ -588,6 +595,28 @@ virJSONValueArrayGet(virJSONValuePtr array, } +virJSONValuePtr +virJSONValueArraySteal(virJSONValuePtr array, + unsigned int element) +{ + virJSONValuePtr ret = NULL; + + if (array->type != VIR_JSON_TYPE_ARRAY) + return NULL; + + if (element >= array->data.array.nvalues) + return NULL; + + ret = array->data.array.values[element]; + + VIR_DELETE_ELEMENT(array->data.array.values, + element, + array->data.array.nvalues); + + return ret; +} + + const char * virJSONValueGetString(virJSONValuePtr string) { diff --git a/src/util/virjson.h b/src/util/virjson.h index db11396258..9487729525 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -97,8 +97,10 @@ int virJSONValueArrayAppend(virJSONValuePtr object, virJSONValuePtr value); int virJSONValueObjectHasKey(virJSONValuePtr object, const char *key); virJSONValuePtr virJSONValueObjectGet(virJSONValuePtr object, const char *key); +bool virJSONValueIsArray(virJSONValuePtr array); int virJSONValueArraySize(virJSONValuePtr object); virJSONValuePtr virJSONValueArrayGet(virJSONValuePtr object, unsigned int element); +virJSONValuePtr virJSONValueArraySteal(virJSONValuePtr object, unsigned int element); int virJSONValueObjectKeysNumber(virJSONValuePtr object); const char *virJSONValueObjectGetKey(virJSONValuePtr object, unsigned int n);