diff --git a/package/pika_cjson/pika_cjson.pyi b/package/pika_cjson/pika_cjson.pyi index bde8de490..7f4091ac4 100644 --- a/package/pika_cjson/pika_cjson.pyi +++ b/package/pika_cjson/pika_cjson.pyi @@ -26,3 +26,4 @@ class cJSON(TinyObj): def getValueInt(self) -> int: ... def getValueDouble(self) -> float: ... def getString(self) -> str: ... + def getValue(self) -> any: ... diff --git a/package/pika_cjson/pika_cjson_cJSON.c b/package/pika_cjson/pika_cjson_cJSON.c index 5a0ea81d4..201beafc3 100644 --- a/package/pika_cjson/pika_cjson_cJSON.c +++ b/package/pika_cjson/pika_cjson_cJSON.c @@ -116,3 +116,27 @@ char* pika_cjson_cJSON_getValueString(PikaObj* self) { cJSON* item = obj_getPtr(self, "item"); return item->valuestring; } + +Arg* pika_cjson_cJSON_getValue(PikaObj* self) { + cJSON* item = obj_getPtr(self, "item"); + int type = item->type; + if (type == cJSON_Invalid) { + return arg_setNull(NULL); + } + if (type == cJSON_False) { + return arg_setInt(NULL, "", 0); + } + if (type == cJSON_True) { + return arg_setInt(NULL, "", 1); + } + if (type == cJSON_NULL) { + return arg_setNull(NULL); + } + if (type == cJSON_Number) { + return arg_setFloat(NULL, "", item->valuedouble); + } + if (type == cJSON_String) { + return arg_setStr(NULL, "", item->valuestring); + } + return arg_setNull(NULL); +}