700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言cgi json CGI程序学习(4)-C程序中JSON解析

c语言cgi json CGI程序学习(4)-C程序中JSON解析

时间:2019-02-27 14:19:28

相关推荐

c语言cgi json CGI程序学习(4)-C程序中JSON解析

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

#include

//用于存储数据

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;

//键值key

struct 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_obj

json_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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。