在C語言的MVC模式中,用戶發送POST請求給控制器(Controller),控制器處理請求調用模型(Model)來數據處理,然后將處理好的數據傳給視圖(View)進行展示。其中在POST請求中,可能會攜帶著JSON格式的數據,下面是C語言中如何處理該POST請求獲取JSON數據:
#include <fcgi_stdio.h> #include <jansson.h> #include <stdlib.h> int main() { while (FCGI_Accept() >= 0) { char* lenstr = getenv("CONTENT_LENGTH"); if (lenstr == NULL) { printf("Content-type: text/html\r\n\r\n"); printf("Error: no Content-Length header\r\n"); } else { long len = strtol(lenstr, NULL, 10); char *input = malloc(len + 1); if (input == NULL) { printf("Content-type: text/html\r\n\r\n"); printf("Error: malloc failed\r\n"); } else { fgets(input, len + 1, stdin); json_t *json = json_loads(input, 0, NULL); if (!json) { printf("Content-type: text/html\r\n\r\n"); printf("Error: Invalid JSON input\r\n"); } else { json_t * name = json_object_get(json, "name"); if (!name) { printf("Content-type: application/json\r\n\r\n"); printf("{\"error\": \"name not found\"}"); } else { const char* name_val = json_string_value(name); printf("Content-type: application/json\r\n\r\n"); printf("{\"name\": \"%s\"}", name_val); } json_decref(json); } free(input); } } } }
代碼分析:
首先通過getenv()函數獲取POST請求中的CONTENT_LENGTH頭文件,通過strtol()函數將其轉為long類型;然后通過malloc()函數分配內存初始化input指針;接下來通過fgets()函數從標準輸入stdin中讀取POST請求中的JSON數據,注意此處必須是JSON字符串。通過json_loads()函數將JSON字符串轉為JSON對象,檢查是否解析正確。接下來通過json_object_get()函數解析JSON對象中的"name"鍵對應的值,檢查是否存在。最后成功時輸出JSON對象的"name"鍵對應的值,失敗時輸出錯誤信息。
上一篇python 表達式相減
下一篇c new json對象