1 #include
2 #include
3 #include
4 #include
5 #include "json.h"
6
7 voidencodeJson();8 voiddecodeJson();9
10 int main(int argc, char **argv)11 {12 int ret = 0;13
14 encodeJson();15
16 decodeJson();17
18 returnret;19 }20
21 static char *json_type_to_name(intjson_type)22 {23 char json_type_name[128];24
25 memset(json_type_name, 0x00, sizeof(json_type_name));26 switch(json_type)27 {28 casejson_type_null:29 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_null");30 break;31
32 casejson_type_boolean:33 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_boolean");34 break;35
36 casejson_type_double:37 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_double");38 break;39
40 casejson_type_int:41 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_int");42 break;43
44 casejson_type_object:45 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_object");46 break;47
48 casejson_type_array:49 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_array");50 break;51
52 casejson_type_string:53 snprintf(json_type_name, sizeof(json_type_name), "%s", "json_type_string");54 break;55 }56
57 returnjson_type_name;58 }59
60 static void getFieldValue(struct json_object *child_obj, const char *field)61 {62 struct json_object *obj =json_object_object_get(child_obj, field);63
64 enum json_type obj_type =json_object_get_type(obj);65 //printf("%s json_type is %s\n", field, json_type_to_name(obj_type));
66
67 if (obj_type ==json_type_int)68 {69 printf("%s=%d\n", field, json_object_get_int(obj));70 }71 else if (obj_type ==json_type_string)72 {73 printf("%s=%s\n", field, json_object_get_string(obj));74 }75 }76
77 voiddecodeJson()78 {79 const char *json_string = "{ \n\
80 \"userinfo\": [ \n\
81 { \"pin\": \"10000\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
82 { \"pin\": \"10001\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
83 { \"pin\": \"10002\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
84 { \"pin\": \"10003\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
85 { \"pin\": \"10004\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
86 { \"pin\": \"10005\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
87 { \"pin\": \"10006\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
88 { \"pin\": \"10007\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
89 { \"pin\": \"10008\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 }, \n\
90 { \"pin\": \"10009\", \"cardno\": \"123456789\", \"password\": \"123456\", \"name\": \"paul\", \"Privilege\": 14, \"flag\": 1 } \n\
91 ] }";
92
93 int ret = 0;94 int i = 0;95 struct json_object *root_obj =NULL;96 struct json_object *arry_obj =NULL;97 struct json_object *child_obj =NULL;98 struct lh_entry *entry =NULL;99 char *key =NULL;100
101 root_obj =json_tokener_parse(json_string);102 entry = json_object_get_object(root_obj)->head;103 if(entry)104 {105 key = (char *)entry->k;106 arry_obj = (struct json_object *)entry->v;107
108 if (json_type_array !=json_object_get_type(arry_obj)109 && json_type_object !=json_object_get_type(arry_obj))110 {111 return -1;112 }113
114 printf("key = %s\n", key);115 printf("array_obj = %s\n", json_object_to_json_string(arry_obj));116
117 if (json_type_array ==json_object_get_type(arry_obj))118 {119 for(i = 0; i < json_object_array_length(arry_obj); i++)120 {121 child_obj =json_object_array_get_idx(arry_obj, i);122 //printf("child_obj = %s\n", json_object_to_json_string(child_obj));
123
124 getFieldValue(child_obj, "pin");125 getFieldValue(child_obj, "cardno");126 getFieldValue(child_obj, "password");127 getFieldValue(child_obj, "name");128 getFieldValue(child_obj, "Privilege");129 getFieldValue(child_obj, "flag");130 printf("\n");131 }132 }133 else if (json_type_object ==json_object_get_type(arry_obj))134 {135
136 }137 }138
139 }140
141 voidencodeJson()142 {143 int i = 0;144 struct json_object *root_obj =NULL;145 struct json_object *child_obj =NULL;146 struct json_object *array_obj =NULL;147 char *tmpStr =NULL;148
149 root_obj =json_object_new_object();150 array_obj =json_object_new_array();151
152 for(i = 0; i < 10; i++)153 {154 child_obj =json_object_new_object();155
156 json_object_object_add(child_obj, "pin", json_object_new_string("10000"));157 json_object_object_add(child_obj, "cardno", json_object_new_string("123456789"));158 json_object_object_add(child_obj, "password", json_object_new_string("123456"));159 json_object_object_add(child_obj, "name", json_object_new_string("paul"));160 json_object_object_add(child_obj, "Privilege", json_object_new_int(14));161 json_object_object_add(child_obj, "flag", json_object_new_int(1));162
163 json_object_array_add(array_obj, child_obj);164 child_obj =NULL;165 }166
167 json_object_object_add(root_obj, "userinfo", array_obj);168
169 tmpStr =json_object_to_json_string(root_obj);170 printf("%s\n", tmpStr);171 }