update json_visit testcasetags/json-c-0.14-20200419
| @@ -12,6 +12,9 @@ static json_c_visit_userfunc emit_object; | |||||
| static json_c_visit_userfunc skip_arrays; | static json_c_visit_userfunc skip_arrays; | ||||
| static json_c_visit_userfunc pop_and_stop; | static json_c_visit_userfunc pop_and_stop; | ||||
| static json_c_visit_userfunc err_on_subobj2; | static json_c_visit_userfunc err_on_subobj2; | ||||
| static json_c_visit_userfunc pop_array; | |||||
| static json_c_visit_userfunc stop_array; | |||||
| static json_c_visit_userfunc err_return; | |||||
| int main(void) | int main(void) | ||||
| { | { | ||||
| @@ -48,6 +51,18 @@ int main(void) | |||||
| printf("json_c_visit(err_on_subobj2)=%d\n", rv); | printf("json_c_visit(err_on_subobj2)=%d\n", rv); | ||||
| printf("================================\n\n"); | printf("================================\n\n"); | ||||
| rv = json_c_visit(jso, 0, pop_array, NULL); | |||||
| printf("json_c_visit(pop_array)=%d\n", rv); | |||||
| printf("================================\n\n"); | |||||
| rv = json_c_visit(jso, 0, stop_array, NULL); | |||||
| printf("json_c_visit(stop_array)=%d\n", rv); | |||||
| printf("================================\n\n"); | |||||
| rv = json_c_visit(jso, 0, err_return, NULL); | |||||
| printf("json_c_visit(err_return)=%d\n", rv); | |||||
| printf("================================\n\n"); | |||||
| json_object_put(jso); | json_object_put(jso); | ||||
| return 0; | return 0; | ||||
| @@ -111,3 +126,43 @@ static int err_on_subobj2(json_object *jso, int flags, | |||||
| return JSON_C_VISIT_RETURN_CONTINUE; | return JSON_C_VISIT_RETURN_CONTINUE; | ||||
| } | } | ||||
| static int pop_array(json_object *jso, int flags, | |||||
| json_object *parent_jso, | |||||
| const char *jso_key, | |||||
| size_t *jso_index, void *userarg) | |||||
| { | |||||
| (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | |||||
| if (jso_index != NULL && (*jso_index == 0)) | |||||
| { | |||||
| printf("POP after handling array[0]\n"); | |||||
| return JSON_C_VISIT_RETURN_POP; | |||||
| } | |||||
| return JSON_C_VISIT_RETURN_CONTINUE; | |||||
| } | |||||
| static int stop_array(json_object *jso, int flags, | |||||
| json_object *parent_jso, | |||||
| const char *jso_key, | |||||
| size_t *jso_index, void *userarg) | |||||
| { | |||||
| (void)emit_object(jso, flags, parent_jso, jso_key, jso_index, userarg); | |||||
| if (jso_index != NULL && (*jso_index == 0)) | |||||
| { | |||||
| printf("STOP after handling array[1]\n"); | |||||
| return JSON_C_VISIT_RETURN_STOP; | |||||
| } | |||||
| return JSON_C_VISIT_RETURN_CONTINUE; | |||||
| } | |||||
| static int err_return(json_object *jso, int flags, | |||||
| json_object *parent_jso, | |||||
| const char *jso_key, | |||||
| size_t *jso_index, void *userarg) | |||||
| { | |||||
| printf("flags: 0x%x, key: %s, index: %ld, value: %s\n", | |||||
| flags, | |||||
| (jso_key ? jso_key : "(null)"), | |||||
| (jso_index ? (long)*jso_index : -1L), | |||||
| json_object_to_json_string(jso)); | |||||
| return 100; | |||||
| } | |||||
| @@ -53,3 +53,37 @@ ERROR after handling subobj1 | |||||
| json_c_visit(err_on_subobj2)=-1 | json_c_visit(err_on_subobj2)=-1 | ||||
| ================================ | ================================ | ||||
| flags: 0x0, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } | |||||
| flags: 0x0, key: obj1, index: -1, value: 123 | |||||
| flags: 0x0, key: obj2, index: -1, value: { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] } | |||||
| flags: 0x0, key: subobj1, index: -1, value: "aaa" | |||||
| flags: 0x0, key: subobj2, index: -1, value: "bbb" | |||||
| flags: 0x0, key: subobj3, index: -1, value: [ "elem1", "elem2", true ] | |||||
| flags: 0x0, key: (null), index: 0, value: "elem1" | |||||
| POP after handling array[0] | |||||
| flags: 0x2, key: subobj3, index: -1, value: [ "elem1", "elem2", true ] | |||||
| flags: 0x2, key: obj2, index: -1, value: { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] } | |||||
| flags: 0x0, key: obj3, index: -1, value: 1.234 | |||||
| flags: 0x0, key: obj4, index: -1, value: [ true, false, null ] | |||||
| flags: 0x0, key: (null), index: 0, value: true | |||||
| POP after handling array[0] | |||||
| flags: 0x2, key: obj4, index: -1, value: [ true, false, null ] | |||||
| flags: 0x2, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } | |||||
| json_c_visit(pop_array)=0 | |||||
| ================================ | |||||
| flags: 0x0, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } | |||||
| flags: 0x0, key: obj1, index: -1, value: 123 | |||||
| flags: 0x0, key: obj2, index: -1, value: { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] } | |||||
| flags: 0x0, key: subobj1, index: -1, value: "aaa" | |||||
| flags: 0x0, key: subobj2, index: -1, value: "bbb" | |||||
| flags: 0x0, key: subobj3, index: -1, value: [ "elem1", "elem2", true ] | |||||
| flags: 0x0, key: (null), index: 0, value: "elem1" | |||||
| STOP after handling array[1] | |||||
| json_c_visit(stop_array)=0 | |||||
| ================================ | |||||
| flags: 0x0, key: (null), index: -1, value: { "obj1": 123, "obj2": { "subobj1": "aaa", "subobj2": "bbb", "subobj3": [ "elem1", "elem2", true ] }, "obj3": 1.234, "obj4": [ true, false, null ] } | |||||
| json_c_visit(err_return)=-1 | |||||
| ================================ | |||||