static void test_string(void) { JSON json = parseJSON(data, data+sizeof(data)); JSON child = JSON_get(json, "app"); assert(JSON_isValid(child)); assert(JSON_type(child) == JSON_Array); assert(JSON_length(child) == 3); JSONArray *a; JSON *I, *E; int i = 0; JSON_ARRAY_EACH(child, a, I, E) { assert(JSON_isValid(JSON_get(*I, "name"))); assert(JSON_isValid(JSON_get(*I, "line"))); assert(JSON_isValid(JSON_get(*I, "version"))); assert(JSON_isValid(JSON_get(*I, "flag"))); size_t len; const char *name = JSON_getString(*I, "name", &len); int line = JSON_getInt(*I, "line"); double ver = JSON_getDouble(*I, "version"); assert(len == strlen(names[i]) && strncmp(name, names[i], len) == 0); assert(line == lines[i]); assert(ver == versions[i]); fprintf(stderr, "%s %d %f\n", name, line, ver); i++; }
static kbool_t RetrieveJsonKeyValue(KonohaContext *kctx, struct JsonBuf *jsonbuf, const char *key, size_t keylen_or_zero, struct JsonBuf *newbuf) { JSON json = JSON_get(AsJSON(jsonbuf), key, KeyLen(key, keylen_or_zero)); JSONObject_Retain(json); newbuf->json_i = json.bits; return newbuf->json_i != 0; }
//## JSON JSON.get(String key); static KMETHOD kJSON_get(KonohaContext *kctx, KonohaStack *sfp) { JSON obj = ((kJSON *)sfp[0].asObject)->json; const char *key = S_text(sfp[1].asString); JSON json = JSON_get(obj, key); KReturn(NewJsonObject(kctx, sfp, json)); }
static kbool_t RetrieveJsonKeyValue(KonohaContext *kctx, struct JsonBuf *jsonbuf, const char *key, size_t keylen_or_zero, struct JsonBuf *newbuf) { newbuf->json_i = JSON_get(toJSON(jsonbuf->json_i), key, KeyLen(key, keylen_or_zero)).bits; return newbuf->json_i != 0; }