C语言中操作JSON数据的方式,在总体的操作上还是比较复杂和麻烦的。需要自己写大量的代码来进行序列化和反序列化的操作。而随着C语言的发展以及互联网的普及,许多第三方的库也应运而生,其中JSON-C库(https://github.com/json-c/json-c)就是一个优秀的选择。该库提供了一个简单的API接口,可以轻松进行JSON数据的反序列化和序列化操作。
// 示例代码:将JSON字符串转化为C结构体 #includestruct my_struct { int int_value; char *string_value; }; int main() { const char *json_string = "{\"int_value\": 123, \"string_value\": \"hello world\"}"; struct my_struct my_struct_object; // 将JSON字符串解析进my_struct_object结构体中 json_object *json_object_root = json_tokener_parse(json_string); json_object *json_object_int_value = json_object_object_get(json_object_root, "int_value"); json_object *json_object_string_value = json_object_object_get(json_object_root, "string_value"); // 解析int_value的值 my_struct_object.int_value = json_object_get_int(json_object_int_value); // 解析string_value的值 const char *string_value = json_object_get_string(json_object_string_value); size_t string_value_length = strlen(string_value); char *copy_of_string_value = malloc(string_value_length + 1); strncpy(copy_of_string_value, string_value, string_value_length); copy_of_string_value[string_value_length] = '\0'; my_struct_object.string_value = copy_of_string_value; // 打印结构体值 printf("My struct: {int_value: %d, string_value: %s}\n", my_struct_object.int_value, my_struct_object.string_value); // 释放内存 free(copy_of_string_value); json_object_put(json_object_root); }
代码中使用了JSON-C库提供的API接口,可以轻松完成反序列化操作。使用json_tokener_parse函数将JSON字符串解析成一个json_object类型的对象,然后使用json_object_object_get函数获取结构体成员json_object类型的值,再使用json_object_get_xxx函数将其转换成C数据类型的值。需要注意的是,不要忘记释放内存。