在C语言中,解析POST JSON数据格式的过程需要先获取POST数据,然后将POST数据反序列化成JSON格式,接着可以通过遍历JSON对象来取得需要的数据。
//获取POST数据 char *post_data = NULL; if (strcmp(cgiRequestMethod, "POST") == 0) { int len = atoi(getenv("CONTENT_LENGTH")); post_data = (char*) malloc(sizeof(char) * (len + 1)); fgets(post_data, len + 1, stdin); } //反序列化POST数据为JSON格式 cJSON *root = cJSON_Parse(post_data); //遍历JSON对象取得需要的数据 if (root != NULL) { cJSON *username = cJSON_GetObjectItem(root, "username"); if (username != NULL) { printf("用户名:%s\n", username->valuestring); } cJSON *password = cJSON_GetObjectItem(root, "password"); if (password != NULL) { printf("密码:%s\n", password->valuestring); } } //释放内存 cJSON_Delete(root); free(post_data);
在上面的代码中,首先通过读取CGI变量"REQUEST_METHOD"来判断是否为POST请求,如果是,则通过读取CGI变量"CONTENT_LENGTH"获取POST数据长度,并分配相应大小的内存来存储POST数据,在调用fgets函数读取POST数据到内存。接着使用cJSON_Parse函数将POST数据反序列化为JSON格式的cJSON对象,这里需要注意的是,需要先检查返回的cJSON对象是否为NULL,如果为NULL,则说明JSON格式有误。然后通过cJSON_GetObjectItem函数遍历JSON对象,取得需要的数据,这里需要注意的是,需要先检查返回的cJSON对象是否为NULL,如果为NULL,则说明JSON对象中没有需要的数据。最后,释放内存。