C語言中經常需要解析json數據,而在解析過程中,有時候會遇到帶有引號的情況,需要特別處理。下面介紹一種比較簡單易懂的c json解析方法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 結構體定義,存儲json數據
typedef struct {
int id;
char name[50];
int age;
char hometown[50];
} Person;
Person parse_json(char *json_str) {
// 字符串切割,去掉引號
char *ptr;
ptr = strtok(json_str, "\"");
int id = atoi(ptr);
ptr = strtok(NULL, "\"");
ptr = strtok(NULL, "\"");
char name[50];
strcpy(name, ptr);
ptr = strtok(NULL, "\"");
ptr = strtok(NULL, "\"");
int age = atoi(ptr);
ptr = strtok(NULL, "\"");
ptr = strtok(NULL, "\"");
char hometown[50];
strcpy(hometown, ptr);
// 將解析后的數據存入結構體
Person p;
p.id = id;
strcpy(p.name, name);
p.age = age;
strcpy(p.hometown, hometown);
return p;
}
int main() {
char json_str[] = "{\"id\": 1, \"name\": \"Lucy\", \"age\": 18, \"hometown\": \"Shanghai\"}";
Person p = parse_json(json_str);
printf("id: %d, name: %s, age: %d, hometown: %s\n", p.id, p.name, p.age, p.hometown);
return 0;
}
在上述代碼中,我們首先定義了一個Person結構體,用來存儲解析后的json數據。在解析json串的過程中,我們使用了strtok函數進行字符串切割,去掉了引號。最后將解析后的數據存入結構體中,并返回。
在主函數中,我們定義了一個json字符串,該字符串中id、name、age、hometown都帶有引號。通過調用parse_json函數,將該json串解析成一個Person結構體并打印出來。
上一篇mysql創建枚舉