struct2json es una estructura C de código abierto y una biblioteca de interconversión rápida JSON que puede realizar rápidamente los requisitos de serialización y deserialización entre objetos de estructura y objetos JSON . El diseño de API rápido y conciso reduce en gran medida la complejidad del código que implica el uso directo de la biblioteca de análisis JSON para implementar dichas funciones.
Aplicar el diseño orientado a objetos al lenguaje C es una idea de diseño muy popular en este momento. Dado que no hay clases en el lenguaje C, la struct
estructura generalmente se usa como una clase y las variables de estructura son objetos. Después de tener un objeto, a menudo es necesario considerar la serialización y deserialización del objeto. A diferencia de muchos lenguajes de alto nivel, el lenguaje C tiene mecanismos como la reflexión, por lo que la serialización y deserialización de objetos son compatibles de forma nativa.
Para el lenguaje C, serializarlo en una cadena JSON es una buena opción, por lo que debe usar una biblioteca de análisis JSON como cJSON. Sin embargo, el código después de su uso es redundante y tiene una lógica deficiente, por lo que se me ocurrió una encapsulación secundaria. la biblioteca cJSON para implementar Una biblioteca para una conversión rápida entre estructura y JSON. Aquí es donde nació struct2json. Los siguientes son los principales escenarios de uso de struct2json:
Se declaran dos estructuras de la siguiente manera. La estructura Hometown
es una subestructura de la estructura Student
/* 籍贯 */
typedef struct {
char name [ 16 ];
} Hometown ;
/* 学生 */
typedef struct {
uint8_t id ;
uint8_t score [ 8 ];
char name [ 10 ];
double weight ;
Hometown hometown ;
} Student ;
Antes de su uso (archivo fuente) | Después del uso (archivo fuente) |
---|---|
Antes de su uso (archivo fuente) | Después del uso (archivo fuente) |
---|---|
将头文件(eg:mc_usr_def.h)放在demoinc目录下;
执行generate_struct_defination.py,生成struct_defination.txt;
执行generate_s2j_code.py,根据结构体定义自动生成结构体与JSON互转代码:my_struct_2_json.c,my_struct_2_json.h;
该脚本支持的参数类型有 基本类型 和 结构体类型,enum和指针按int处理,不支持union和位域;
支持的数组类型:支持基本类型一维数组,结构体一维数组,字符二维数组(字符串数组)
cd demo
编译测试代码,gcc ../cJSON/cJSON.c ../struct2json/src/*.c ./*.c -I ../cJSON/ -I ../struct2json/inc/ -lm -DDEBUGS2J -g -o tests2j
测试 ./tests2j
查看output输出和生成的JSON样例文件struct_defination.json;
预期输出:*:strcmp:0 *:strcmp:0
*:json_cmp:1
Bienvenidos a todos a la solicitud de bifurcación y extracción (Github|OSChina|Coding). Si cree que este proyecto de código abierto es excelente, puede hacer clic en Estrella en la esquina superior derecha de la página de inicio del proyecto y recomendarlo a más amigos que lo necesiten.
Para contenido específico, consulte los archivos en docszh
. Asegúrese de leer la documentación antes de usarlo.
Copyright del MIT (c) [email protected]