C WebAPI 返回 JSON 字符串是在 Web 开发中常见的一种数据格式。JSON 是一种轻量级的数据交换格式,具有易读性、可扩展性和跨语言性等特点,因此被广泛应用于前后端数据传输。
在 C 语言中,我们可以使用各种第三方库实现 JSON 的序列化和反序列化。例如 cJSON、jansson 等。以下代码演示了如何使用 cJSON 库将 C 结构体转化为 JSON 字符串:
#include <stdio.h> #include <cjson/cJSON.h> typedef struct { int id; char name[20]; double price; } Product; int main() { Product product = {1, "apple", 3.5}; cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "id", product.id); cJSON_AddStringToObject(root, "name", product.name); cJSON_AddNumberToObject(root, "price", product.price); char *json = cJSON_PrintUnformatted(root); printf("%s\n", json); cJSON_Delete(root); free(json); return 0; }
上述代码中我们定义了一个 Product 结构体,包含了商品的 ID、名称和价格等信息。使用 cJSON 库将此结构体转为 JSON 对象,并打印 JSON 字符串。其中 cJSON_AddNumberToObject() 用于添加数值类型数据, cJSON_AddStringToObject() 用于添加字符串类型数据。
返回 JSON 字符串可以在 WebAPI 中方便地与前端交互数据。以下代码演示了如何使用 Mongoose Web 服务器返回 JSON 字符串:
#include <stdio.h> #include <cJSON/cJSON.h> #include <mongoose.h> static void handler(struct mg_connection *nc, int ev, void *p) { if (ev == MG_EV_HTTP_REQUEST) { cJSON *root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "message", "Hello, World!"); char *json = cJSON_PrintUnformatted(root); mg_printf(nc, "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n%s", json); cJSON_Delete(root); free(json); } } int main() { struct mg_mgr mgr; struct mg_connection *nc; mg_mgr_init(&mgr, NULL); nc = mg_bind(&mgr, "8080", handler); mg_set_protocol_http_websocket(nc); while (1) mg_mgr_poll(&mgr, 1000); mg_mgr_free(&mgr); return 0; }
上述代码中我们使用 Mongoose Web 服务器框架,当收到 HTTP 请求时,返回一个简单的 JSON 字符串给前端。其中 Content-Type 设置为 application/json,表示返回 JSON 数据格式。
总之,C WebAPI 返回 JSON 字符串是 Web 开发中必不可少的一种技术,通过合理使用第三方库和 Web 服务器框架,可以方便地实现跨语言数据交换及前后端数据传输。