淘先锋技术网

首页 1 2 3 4 5 6 7

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 服务器框架,可以方便地实现跨语言数据交换及前后端数据传输。