JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它非常適合發(fā)送和解析數(shù)據(jù)。C語言中也提供了相關(guān)的庫方便我們發(fā)送和解析JSON數(shù)據(jù)。
1. JSON發(fā)送
#include <stdio.h>#include <stdlib.h>#include <curl/curl.h>#include <cJSON.h>int main() { CURL *curl; CURLcode res; // 創(chuàng)建一個(gè)cJSON對(duì)象并添加數(shù)據(jù) cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "Tom"); cJSON_AddNumberToObject(root, "age", 21); cJSON_AddBoolToObject(root, "married", false); // 將cJSON對(duì)象轉(zhuǎn)換成JSON字符串 char *json = cJSON_Print(root); // 初始化CURL curl = curl_easy_init(); if (curl) { // 設(shè)置請(qǐng)求的URL curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/api"); // 設(shè)置POST請(qǐng)求方式 curl_easy_setopt(curl, CURLOPT_POST, 1L); // 設(shè)置POST的數(shù)據(jù) curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json); // 發(fā)送請(qǐng)求 res = curl_easy_perform(curl); // 清理curl對(duì)象 curl_easy_cleanup(curl); } // 釋放cJSON的內(nèi)存 cJSON_Delete(root); // 釋放JSON字符串的內(nèi)存 free(json); return 0; }
2. JSON解析
#include <stdio.h>#include <stdlib.h>#include <cJSON.h>int main() { // JSON字符串 char *json_str = "{\"name\": \"Tom\", \"age\": 21, \"married\": false}"; // 解析JSON字符串 cJSON *root = cJSON_Parse(json_str); if (root) { // 獲取name字段的值 cJSON *name_item = cJSON_GetObjectItem(root, "name"); if (name_item) { printf("name: %s\n", name_item->valuestring); } // 獲取age字段的值 cJSON *age_item = cJSON_GetObjectItem(root, "age"); if (age_item) { printf("age: %d\n", age_item->valueint); } // 獲取married字段的值 cJSON *married_item = cJSON_GetObjectItem(root, "married"); if (married_item) { printf("married: %d\n", married_item->valueint); } // 釋放cJSON對(duì)象 cJSON_Delete(root); } return 0; }