add functions for easier json object/array access
[uwplayer.git] / application / json.c
index 6b126d4..4dd672c 100644 (file)
@@ -842,3 +842,46 @@ int json_read_value(JSONParser *p, JSONValue **value) {
     return 1;
 }
 
+JSONValue* json_obj_get(JSONObject *obj, const char *name) {
+    for(size_t i=0;i<obj->size;i++) {
+        if(!strcmp(obj->values[i].name, name)) {
+            return obj->values[i].value;
+        }
+    }
+    return NULL;
+}
+
+JSONValue* json_array_get(JSONArray *array, size_t i) {
+    if(i >= array->size) return NULL;
+    return array->array[i];
+}
+
+void json_value_free(JSONValue *value) {
+    switch(value->type) {
+        case JSON_OBJECT: {
+            JSONObject obj = value->value.object;
+            for(size_t i=0;i<obj.size;i++) {
+                json_value_free(obj.values[i].value);
+                free(obj.values[i].name);
+            }
+            free(obj.values);
+            break;
+        }
+        case JSON_ARRAY: {
+            JSONArray array = value->value.array;
+            for(size_t i=0;i<array.size;i++) {
+                json_value_free(array.array[i]);
+            }
+            free(array.array);
+            break;
+        }
+        case JSON_STRING: {
+            free(value->value.string.string);
+            break;
+        }
+        default: {
+            break;
+        }
+    }
+    free(value);
+}