json与c语言如何交互
时间: 2024-05-02 15:18:15 浏览: 8
在C语言中,可以使用第三方库或手动解析JSON字符串来与JSON交互。以下是使用第三方库的示例:
1. cJSON库
cJSON是一个轻量级的C语言库,用于解析和生成JSON数据。它提供了一组简单的API,可以方便地将JSON数据转换为C语言中的结构体,并反之亦然。
例如,以下代码将一个JSON字符串解析为cJSON对象,并获取其中的数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main() {
char *json_str = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
cJSON *root = cJSON_Parse(json_str);
if (root == NULL) {
printf("Error parsing JSON: %s\n", cJSON_GetErrorPtr());
return 1;
}
char *name = cJSON_GetObjectItem(root, "name")->valuestring;
int age = cJSON_GetObjectItem(root, "age")->valueint;
char *city = cJSON_GetObjectItem(root, "city")->valuestring;
printf("Name: %s\n", name);
printf("Age: %d\n", age);
printf("City: %s\n", city);
cJSON_Delete(root);
return 0;
}
```
2. jsmn库
jsmn是一个轻量级的C语言库,用于解析JSON数据。它提供了一组简单的API,可以将JSON数据解析为一系列令牌,并根据需要访问这些令牌。
例如,以下代码将一个JSON字符串解析为一系列令牌,并获取其中的数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include "jsmn.h"
int main() {
char *json_str = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
jsmn_parser parser;
jsmn_init(&parser);
int num_tokens = 10;
jsmntok_t tokens[num_tokens];
int num_parsed = jsmn_parse(&parser, json_str, strlen(json_str), tokens, num_tokens);
if (num_parsed < 0) {
printf("Error parsing JSON\n");
return 1;
}
for (int i = 0; i < num_parsed; i++) {
if (tokens[i].type == JSMN_STRING && strncmp("name", json_str + tokens[i].start, tokens[i].end - tokens[i].start) == 0) {
printf("Name: %.*s\n", tokens[i+1].end - tokens[i+1].start, json_str + tokens[i+1].start);
} else if (tokens[i].type == JSMN_PRIMITIVE && strncmp("age", json_str + tokens[i].start, tokens[i].end - tokens[i].start) == 0) {
printf("Age: %.*s\n", tokens[i].end - tokens[i].start, json_str + tokens[i].start);
} else if (tokens[i].type == JSMN_STRING && strncmp("city", json_str + tokens[i].start, tokens[i].end - tokens[i].start) == 0) {
printf("City: %.*s\n", tokens[i+1].end - tokens[i+1].start, json_str + tokens[i+1].start);
}
}
return 0;
}
```
需要注意的是,使用这些库时需要在编译时链接相应的库文件。