struct2json ist eine Open-Source-C-Struktur und eine schnelle JSON-Konvertierungsbibliothek. Sie kann die Serialisierungs- und Deserialisierungsanforderungen zwischen Strukturobjekten und JSON-Objekten schnell realisieren. Das schnelle und übersichtliche API-Design reduziert die Codekomplexität bei der direkten Verwendung der JSON-Parsing-Bibliothek zur Implementierung solcher Funktionen erheblich.
Die Anwendung von objektorientiertem Design auf die Sprache C ist derzeit eine sehr beliebte Designidee. Da es in der C-Sprache keine Klassen gibt, wird die struct
im Allgemeinen als Klasse verwendet und die Strukturvariablen sind Objekte. Nachdem Sie ein Objekt haben, müssen Sie häufig über die Serialisierung und Deserialisierung des Objekts nachdenken. Im Gegensatz zu vielen Hochsprachen verfügt die C-Sprache über Mechanismen wie Reflektion, sodass Objektserialisierung und -deserialisierung nativ unterstützt werden.
Für die C-Sprache ist die Serialisierung in JSON-Strings eine gute Wahl, daher müssen Sie eine JSON-Parsing-Bibliothek wie cJSON verwenden. Da der Code nach der Verwendung jedoch redundant ist und eine schlechte Logik aufweist, habe ich mir eine sekundäre Kapselung des cJSON ausgedacht Bibliothek zum Implementieren einer Bibliothek für die schnelle Konvertierung zwischen Struktur und JSON. Hier wurde struct2json geboren. Im Folgenden sind die Hauptverwendungsszenarien von struct2json aufgeführt:
Zwei Strukturen werden wie folgt deklariert. Die Struktur Hometown
ist eine Unterstruktur der Struktur Student
/* 籍贯 */
typedef struct {
char name [ 16 ];
} Hometown ;
/* 学生 */
typedef struct {
uint8_t id ;
uint8_t score [ 8 ];
char name [ 10 ];
double weight ;
Hometown hometown ;
} Student ;
Vor der Verwendung (Quelldatei) | Nach der Verwendung (Quelldatei) |
---|---|
Vor der Verwendung (Quelldatei) | Nach der Verwendung (Quelldatei) |
---|---|
将头文件(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
Herzlich willkommen bei Fork und Pull Request (Github|OSChina|Coding). Wenn Sie der Meinung sind, dass dieses Open-Source-Projekt großartig ist, können Sie oben rechts auf der Projekthomepage auf „Stern“ klicken und es weiteren bedürftigen Freunden empfehlen.
Spezifische Inhalte finden Sie in den Dateien unter docszh
. Lesen Sie unbedingt die Dokumentation, bevor Sie es verwenden.
MIT Copyright (c) [email protected]