struct2json é uma estrutura C de código aberto e uma biblioteca de interconversão rápida JSON. Ele pode realizar rapidamente os requisitos de serialização e desserialização entre objetos de estrutura e objetos JSON . O design rápido e conciso da API reduz bastante a complexidade do código do uso direto da biblioteca de análise JSON para implementar tais funções.
Aplicar design orientado a objetos à linguagem C é uma ideia de design muito popular no momento. Como não existem classes na linguagem C, a estrutura struct
geralmente é usada como uma classe e as variáveis de estrutura são objetos. Depois de ter um objeto, muitas vezes você precisa considerar a serialização e desserialização do objeto. Ao contrário de muitas linguagens de alto nível, a linguagem C possui mecanismos como reflexão, de modo que a serialização e desserialização de objetos são suportadas nativamente.
Para a linguagem C, serializar em strings JSON é uma boa escolha, então você deve usar uma biblioteca de análise JSON como cJSON. No entanto, o código após o uso é redundante e tem lógica pobre, então criei um encapsulamento secundário do cJSON. biblioteca para implementar Uma biblioteca para conversão rápida entre struct e JSON. Foi aqui que nasceu o struct2json. A seguir estão os principais cenários de uso do struct2json:
Duas estruturas são declaradas a seguir. A estrutura Hometown
é uma subestrutura da estrutura 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 usar (arquivo fonte) | Após o uso (arquivo fonte) |
---|---|
Antes de usar (arquivo fonte) | Após o uso (arquivo fonte) |
---|---|
将头文件(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
Bem-vindos a todos na solicitação de fork e pull (Github | OSChina | Coding). Se você acha que este projeto de código aberto é ótimo, você pode clicar em Estrela no canto superior direito da página inicial do projeto e recomendá-lo a mais amigos necessitados.
Para conteúdo específico, consulte os arquivos em docszh
. Certifique-se de ler a documentação antes de usá-lo.
Direitos autorais do MIT (c) [email protected]