struct2json은 오픈 소스 C 구조 및 JSON 빠른 상호 변환 라이브러리로, 구조 개체 와 JSON 개체 간의 직렬화 및 역직렬화 요구 사항을 빠르게 실현할 수 있습니다. 빠르고 간결한 API 디자인은 JSON 구문 분석 라이브러리를 직접 사용하여 이러한 기능을 구현하는 데 따른 코드 복잡성을 크게 줄여줍니다.
C 언어에 객체 지향 디자인을 적용하는 것은 현재 매우 인기 있는 디자인 아이디어입니다. C 언어에는 클래스가 없기 때문에 일반적으로 구조체 struct
클래스로 사용하고 구조체 변수는 객체로 사용한다. 개체를 얻은 후 개체의 직렬화 및 역직렬화를 고려해야 하는 경우가 많습니다. 많은 고급 언어와 달리 C 언어에는 리플렉션과 같은 메커니즘이 있으므로 개체 직렬화 및 역직렬화가 기본적으로 지원됩니다.
C 언어의 경우 JSON 문자열로 직렬화하는 것이 좋은 선택이므로 cJSON과 같은 JSON 구문 분석 라이브러리를 사용해야 합니다. 그러나 사용 후 코드가 중복되고 로직이 좋지 않아 2차 캡슐화를 생각해 냈습니다. 구조체와 JSON 간의 빠른 변환을 위한 라이브러리를 구현하기 위한 cJSON 라이브러리. 이것이 struct2json이 탄생한 곳입니다. 다음은 struct2json의 주요 사용 시나리오입니다.
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
포크 및 풀 리퀘스트(Github|OSChina|Coding)에 오신 것을 환영합니다. 이 오픈소스 프로젝트가 훌륭하다고 생각하신다면, 프로젝트 홈페이지 오른쪽 상단의 별표를 클릭해 도움이 필요한 더 많은 친구들에게 추천해 주세요.
구체적인 내용은 docszh
아래의 파일을 참조하세요. 사용하기 전에 설명서를 꼭 읽어보세요 .
MIT 저작권 (c) [email protected]