欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c json 解析庫比較

林子帆2年前8瀏覽0評論

今天我們來討論一下C語言下的JSON解析庫,主要比較以下三種庫:

  1. cJSON
  2. Jansson
  3. JSMN

首先我們來看一下cJSON。

#include "cJSON.h"
...
cJSON *root = cJSON_Parse(json_str);
if (root)
{
cJSON *item = cJSON_GetObjectItem(root,"item");
//doing something with item
cJSON_Delete(root);
}

使用上述代碼對JSON進行解析,其中json_str為要解析的JSON字符串,解析后返回的是一個cJSON對象,可以通過cJSON_GetObjectItem()函數獲取其中的元素,返回的也是cJSON類型,最后需要刪除cJSON對象。

接下來是Jansson的使用。

#include "jansson.h"
...
json_error_t error;
json_t *root = json_loads(json_str, 0, &error);
if (root)
{
json_t *item = json_object_get(root,"item");
//doing something with item
json_decref(root);
}

與cJSON類似,使用上述代碼對JSON進行解析,其中json_str為要解析的JSON字符串,解析后返回的是一個json_t對象,可以通過json_object_get()函數獲取其中的元素,最后需要釋放json_t對象。

最后是JSMN。

#define JSMN_HEADER
#include "jsmn.h"
...
jsmn_parser parser;
jsmn_init(&parser);
int size = 256;
jsmntok_t *token = malloc(sizeof(jsmntok_t) * size);
if (!token)
{
return 1;
}
int r = jsmn_parse(&parser, JSON_STRING, JSON_STRING_LEN, token, size);
if (r< 0)
{
return 1;
}
int objectIndex = -1;
for (int i = 0; i< r; i++)
{
if (token[i].type == JSMN_OBJECT)
{
objectIndex = i + 1;
}
else if (objectIndex >= 0 && token[i].type == JSMN_STRING && jsmn_strcmp(JSON_STRING, &token[i], "item") == 0)
{
//doing something with data
break;
}
}
free(token);

使用JSMN時需要手動指定緩存大小,同時需要手動解析JSON字符串,比較繁瑣,但是效率相對較高。

綜上,cJSON在使用上比較簡單、方便,但是效率相對較低,Jansson在使用上稍微繁瑣一些,但是效率比cJSON高,JSMN相對來說使用上比較繁瑣,但是效率最高,具體選擇哪種解析庫需要根據實際情況來判斷。