struct2json est une bibliothèque de structure C open source et d'interconversion rapide JSON qui peut rapidement répondre aux exigences de sérialisation et de désérialisation entre les objets de structure et les objets JSON . La conception rapide et concise de l'API réduit considérablement la complexité du code liée à l'utilisation directe de la bibliothèque d'analyse JSON pour implémenter de telles fonctions.
L’application de la conception orientée objet au langage C est une idée de conception très populaire à l’heure actuelle. Puisqu'il n'y a pas de classes dans le langage C, la structure struct
est généralement utilisée comme classe et les variables de structure sont des objets. Après avoir obtenu un objet, vous devez souvent envisager la sérialisation et la désérialisation de l'objet. Contrairement à de nombreux langages de haut niveau, le langage C dispose de mécanismes tels que la réflexion, de sorte que la sérialisation et la désérialisation des objets sont prises en charge de manière native.
Pour le langage C, la sérialisation en chaînes JSON est un bon choix, vous devez donc utiliser une bibliothèque d'analyse JSON telle que cJSON. Cependant, le code après utilisation est redondant et a une mauvaise logique, j'ai donc proposé une encapsulation secondaire du cJSON. bibliothèque à implémenter Une bibliothèque pour une conversion rapide entre struct et JSON. C'est là que struct2json est né. Voici les principaux scénarios d'utilisation de struct2json :
Deux structures sont déclarées comme suit. La structure Hometown
est une sous-structure de la structure Student
/* 籍贯 */
typedef struct {
char name [ 16 ];
} Hometown ;
/* 学生 */
typedef struct {
uint8_t id ;
uint8_t score [ 8 ];
char name [ 10 ];
double weight ;
Hometown hometown ;
} Student ;
Avant utilisation (fichier source) | Après utilisation (fichier source) |
---|---|
Avant utilisation (fichier source) | Après utilisation (fichier source) |
---|---|
将头文件(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
Bienvenue à tous pour fork et pull request (Github | OSChina | Coding). Si vous pensez que ce projet open source est génial, vous pouvez cliquer sur Étoile dans le coin supérieur droit de la page d'accueil du projet et le recommander à davantage d'amis dans le besoin.
Pour un contenu spécifique, veuillez vous référer aux fichiers sous docszh
. Assurez-vous de lire la documentation avant de l'utiliser.
Copyright MIT (c) [email protected]