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);
+}