在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对象。