Json是一種輕量級的數據交換格式,在Web開發中廣泛應用。而C語言作為一種高效的系統編程語言,在Json處理中也占有一席之地。本文將介紹C語言中常用的Json序列化庫和反序列化庫。
cJSON
#include "cJSON.h"
void main()
{
cJSON *root = NULL;
root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "John");
cJSON_AddItemToObject(root, "languages", languages=cJSON_CreateArray());
cJSON_AddStringToObject(languages, "C");
cJSON_AddStringToObject(languages, "Python");
char *out=cJSON_Print(root);
printf("%s\n",out);
free(out);
cJSON_Delete(root);
}
JSMN
#include "jsmn.h"
void main()
{
char *json = "{\"name\":\"John\", \"languages\":[\"C\", \"Python\"]}";
jsmn_parser parser;
jsmntok_t tokens[128];
jsmn_init(&parser);
int num_tokens = jsmn_parse(&parser, json, strlen(json), tokens, 128);
for (int i = 1; i < num_tokens; i++) {
if (jsoneq(json, &tokens[i], "name") == 0) {
printf("Name: %.*s\n", tokens[i+1].end - tokens[i+1].start, json + tokens[i+1].start);
i++;
} else if (jsoneq(json, &tokens[i], "languages") == 0) {
printf("Languages: ");
i++;
for (int j = 0; j < tokens[i].size; j++) {
printf("%.*s", tokens[i+j+1].end - tokens[i+j+1].start, json + tokens[i+j+1].start);
if (j + 1 != tokens[i].size)
printf(", ");
}
printf("\n");
i += tokens[i].size;
}
}
}
以上是兩種常用的C語言Json序列化庫和反序列化庫的示例代碼。使用這些庫可以方便地處理Json數據。值得注意的是,Json數據格式十分嚴格,不符合規范的Json數據將無法正確處理。