struct2json — это структура C с открытым исходным кодом и библиотека быстрого взаимного преобразования JSON. Она может быстро реализовать требования сериализации и десериализации между объектами структуры и объектами JSON . Быстрый и лаконичный дизайн API значительно снижает сложность кода при прямом использовании библиотеки синтаксического анализа JSON для реализации таких функций.
Применение объектно-ориентированного проектирования к языку C в настоящее время является очень популярной идеей проектирования. Поскольку в языке C нет классов, struct
struct обычно используется как класс, а переменные структуры являются объектами. После создания объекта вам часто необходимо рассмотреть вопрос о сериализации и десериализации объекта. В отличие от многих языков высокого уровня, язык C имеет такие механизмы, как отражение, поэтому сериализация и десериализация объектов поддерживаются изначально.
Для языка C сериализация в строки JSON — хороший выбор, поэтому вам придется использовать библиотеку синтаксического анализа JSON, например cJSON. Однако код после использования является избыточным и имеет плохую логику, поэтому я придумал вторичную инкапсуляцию cJSON. библиотека для реализации Библиотека для быстрого преобразования между структурой и JSON. Именно здесь родился 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]