struct2json เป็นโครงสร้างโอเพ่นซอร์ส C และไลบรารีการแปลงอย่างรวดเร็วของ JSON สามารถรับรู้ข้อกำหนดการทำให้เป็นซีเรียลไลซ์และดีซีเรียลไลซ์ระหว่าง วัตถุโครงสร้าง และ วัตถุ JSON ได้อย่างรวดเร็ว การออกแบบ API ที่รวดเร็วและรัดกุมช่วยลดความซับซ้อนของโค้ดในการใช้ไลบรารีการแยกวิเคราะห์ JSON โดยตรงเพื่อใช้งานฟังก์ชันดังกล่าวได้อย่างมาก
การใช้การออกแบบเชิงวัตถุกับภาษา C เป็นแนวคิดการออกแบบที่ได้รับความนิยมอย่างมากในขณะนี้ เนื่องจากไม่มีคลาสในภาษา C โดยทั่วไป struct
โครงสร้างจึงถูกใช้เป็นคลาส และตัวแปรโครงสร้างจะเป็นอ็อบเจ็กต์ หลังจากมีอ็อบเจ็กต์แล้ว คุณมักจะต้องพิจารณาซีเรียลไลซ์เซชันและดีซีเรียลไลซ์ของอ็อบเจ็กต์ ภาษา C มีกลไกต่างๆ เช่น การสะท้อน ซึ่งแตกต่างจากภาษาระดับสูงอื่นๆ ดังนั้นจึงรองรับการทำให้เป็นอนุกรมของวัตถุและดีซีเรียลไลซ์โดยกำเนิด
สำหรับภาษา C การทำให้เป็นอนุกรมในสตริง JSON เป็นตัวเลือกที่ดี ดังนั้น คุณต้องใช้ไลบรารีการแยกวิเคราะห์ JSON เช่น cJSON อย่างไรก็ตาม โค้ดหลังการใช้งานซ้ำซ้อนและมีตรรกะที่ไม่ดี ดังนั้นฉันจึงคิดขึ้นมาด้วยการห่อหุ้มรองของ cJSON ไลบรารีเพื่อใช้ไลบรารีเพื่อการแปลงอย่างรวดเร็วระหว่าง struct และ JSON นี่คือที่มาของ struct2json ต่อไปนี้เป็นสถานการณ์การใช้งานหลักของ struct2json:
มีการประกาศโครงสร้าง 2 แบบดังนี้ โครงสร้าง Hometown
เป็นโครงสร้างย่อยของโครงสร้าง Student
/* 籍贯 */
typedef struct {
char name [ 16 ];
} Hometown ;
/* 学生 */
typedef struct {
uint8_t id ;
uint8_t score [ 8 ];
char name [ 10 ];
double weight ;
Hometown hometown ;
} Student ;
ก่อนใช้งาน (ไฟล์ต้นฉบับ) | หลังการใช้งาน (ไฟล์ต้นฉบับ) |
---|---|
ก่อนใช้งาน (ไฟล์ต้นฉบับ) | หลังการใช้งาน (ไฟล์ต้นฉบับ) |
---|---|
将头文件(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
ยินดีต้อนรับทุกคน สู่ fork และ pull request (Github|OSChina|Coding) หากคุณคิดว่าโครงการโอเพ่นซอร์สนี้ยอดเยี่ยม คุณสามารถคลิกติด ดาว ที่มุมขวาบนของหน้าแรกของโครงการ และแนะนำให้กับเพื่อนที่ต้องการความช่วยเหลือเพิ่มเติม
สำหรับเนื้อหาเฉพาะ โปรดดูไฟล์ภายใต้ docszh
อย่าลืม อ่านเอกสาร ก่อนใช้งาน
ลิขสิทธิ์ของ MIT (c) [email protected]