CGI程序学习(4)-C程序中JSON解析

来源:互联网 发布:淘宝瓷器店铺店招图片 编辑:程序博客网 时间:2024/05/17 00:13

C程序中数据封装和解析也可以用到JSON,不过需要额外添加json.h库

#include <json/json.h>//用于存储数据int array_number;char wifiname_user[100][100];char encryption_user[100][100];char signal_user[100][100];char channel_user[100][100];//解析json函数int AnalyJson(char *data);//修剪string函数char *PruneString(char *Pstr);int main(){   int status = AnalyJson(String);   if(status != 0)   {     printf("Can't Json!");     return -1;   }   for(j = 0;j < array_number;j++)   {     printf("%s",wifiname_user[j]);   }   return 0;}
int AnalyJson(char *data){//printf("data is %s\n\n",data);//json数据集struct json_object *new_obj = NULL;//data数据域struct json_object *obj_array = NULL;//每一条数据struct json_object *array_string = NULL;//键值keystruct json_object *string_wifiname , *string_encryption , *int_signal , *int_channel;//数组个数计数int i;//数据集长度int len = strlen(data);//修剪字符串char prune_wifiname[100] = {0};char prune_encryption[100] = {0};//char wifiname_str[100] = {0};//判断数据长度,不符合长度,当错误数据处理if (len > 10){//判断数据是否完整//if((data[0] == '{') && (data[len-1] == '}'))if(data[0] == '{'){//将数据集转json格式new_obj = json_tokener_parse(data);//判断json格式是否正确if (is_error(new_obj)){printf("json格式错误!\n");//释放new_objjson_object_put(new_obj);}else{//获得key为name的值obj_array = json_object_object_get(new_obj,"data");//打印json_object类型//printf("data = %s\n",json_object_to_json_string(obj_array));//数组个数array_number = json_object_array_length(obj_array);//printf("length = %d\n",array_number);//循环解析for (i = 0 ; i < array_number ; i++){//取出每一条数据array_string = json_object_array_get_idx(obj_array,i);//printf("string_array %d is %s\n",i,json_object_to_json_string(array_string));//取键值对string_wifiname= json_object_object_get(array_string,"wifiname");string_encryption= json_object_object_get(array_string,"encryption");int_signal= json_object_object_get(array_string,"signal");int_channel= json_object_object_get(array_string,"channel");//写入数组中,保存全局sprintf(prune_wifiname,"%s",json_object_to_json_string(string_wifiname));sprintf(prune_encryption,"%s",json_object_to_json_string(string_encryption));sprintf(wifiname_user[i],"%s",PruneString(prune_wifiname));sprintf(encryption_user[i],"%s",PruneString(prune_encryption));sprintf(signal_user[i],"%s",json_object_to_json_string(int_signal));sprintf(channel_user[i],"%s",json_object_to_json_string(int_channel));json_object_put(array_string);}//释放数据集json_object_put(obj_array);json_object_put(new_obj);}}else{printf("数据不完整!\n");return -1;}}else{printf("数据大小错误!\n");return -1;}return 0;}char *PruneString(char *Pstr){char *wifiname_str = (char *)malloc(100);int str_len = strlen(Pstr);int j;for (j = 0 ; j < str_len ; j++){wifiname_str[j] = Pstr[j + 1];}wifiname_str[str_len - 2] = '\0';//printf("%s len = %d  -> %s\n",Pstr,str_len,wifiname_str);return wifiname_str;}


0 0
原创粉丝点击