淘先锋技术网

首页 1 2 3 4 5 6 7

在C语言中,自制解析JSON是一项非常基础、重要的技能。JSON是一种轻量级的数据交换格式,因此在数据的处理中经常会用到。下面通过示例,介绍如何在C语言中自制解析JSON。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <jansson.h>
int parse_json(char *json_string)
{
json_t *root = NULL;
json_error_t error;
size_t index;
const char *key;
json_t *value;
root = json_loads(json_string, 0, &error);
if (!root)
{
fprintf(stderr, "Error: on line %d: %s\n", error.line, error.text);
return 1;
}
printf("JSON string:\n%s\n\n", json_string);
printf("JSON object:\n%s\n\n", json_dumps(root, JSON_INDENT(4)));
if (!json_is_object(root))
{
fprintf(stderr, "Error: root is not an object\n");
json_decref(root);
return 1;
}
json_object_foreach(root, key, value)
{
printf("key=%s\n", key);
switch (json_typeof(value))
{
case JSON_OBJECT:
printf("value = object\n");
break;
case JSON_ARRAY:
printf("value = array\n");
break;
case JSON_STRING:
printf("value = %s\n", json_string_value(value));
break;
case JSON_INTEGER:
printf("value = %ld\n", json_integer_value(value));
break;
case JSON_REAL:
printf("value = %f\n", json_real_value(value));
break;
case JSON_TRUE:
printf("value = true\n");
break;
case JSON_FALSE:
printf("value = false\n");
break;
case JSON_NULL:
printf("value = null\n");
break;
default:
fprintf(stderr, "Error: unknown JSON type\n");
json_decref(root);
return 1;
}
}
json_decref(root);
return 0;
}
int main(int argc, char *argv[])
{
char *json_string = "{ \"name\":\"John Smith\", \"age\":33, \"email\":\"john.smith@mail.com\" }";
parse_json(json_string);
return 0;
}

上述代码实现了一个简单的JSON解析器,可以将JSON字符串解析成一个JSON对象,并列出其中各个key-value对的值。

其中,使用了jansson这个JSON解析库,需要将其头文件和库文件加入项目中。首先,通过调用json_loads()函数将JSON字符串加载成一个JSON对象,通过判断root是否为一个object来确定是否解析成功。

接着,通过json_object_foreach()函数遍历JSON对象中的每个键值对,再通过json_typeof()函数判断值的类型,并打印出其值。

通过以上简单介绍,你可以初步了解如何在C语言中自制JSON解析器,并将JSON字符串解析成一个JSON对象。