Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit ccea788

Browse files
author
Nikita Glukhov
committed
Add JsonGetObjectSize()
1 parent 8f88c0f commit ccea788

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

src/backend/utils/adt/json_generic.c

+21
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,27 @@ jsonGetArraySize(JsonContainer *array)
282282
return size;
283283
}
284284

285+
uint32
286+
JsonGetObjectSize(JsonContainer *object)
287+
{
288+
JsonValue val;
289+
JsonIterator *it;
290+
JsonIteratorToken tok;
291+
uint32 size = 0;
292+
293+
Assert(JsonContainerIsObject(object));
294+
295+
it = JsonIteratorInit(object);
296+
297+
while ((tok = JsonIteratorNext(&it, &val, true)) != WJB_DONE)
298+
{
299+
if (tok == WJB_KEY)
300+
size++;
301+
}
302+
303+
return size;
304+
}
305+
285306
static void
286307
jsonvInitContainer(JsonContainerData *jc, const JsonValue *val)
287308
{

src/include/utils/json_generic.h

+1
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,7 @@ extern JsonValue *jsonFindLastKeyInObject(JsonContainer *obj, const char *key,
524524
extern JsonValue *jsonFindValueInArray(JsonContainer *array, const JsonValue *elem);
525525
extern uint32 jsonGetArraySize(JsonContainer *array);
526526
extern JsonValue *jsonGetArrayElement(JsonContainer *array, uint32 index);
527+
extern uint32 JsonGetObjectSize(JsonContainer *object);
527528

528529
extern bool JsonValueScalarEquals(const JsonValue *aScalar,
529530
const JsonValue *bScalar);

0 commit comments

Comments
 (0)