C语言JSON序列化/反序列化
最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个;
两个问题:
- C语言结构体本身没有元数据,这也就没法在生成过程中自动分析类型进行处理,所以,需要生成对应结构体的元数据信息,根据元数据完成对结构体的序列化和反序列化;
- 结构体的嵌套很复杂,需要支持多层结构体和结构体数组直接互相嵌套的序列化反序列化,于是考虑使用递归函数,结合1中的元数据,进行结构体偏移和处理;
考虑如下步骤:
- 配置xml文件,文件中配置结构体,结构体中的成员属性,以及它们之间的关系;
- 结合Tinyxml库编写解析xml文件的工具,通过这个工具生成包含结构体,结构体元数据(包含结构体关系,成员名称,类型,偏移,大小等),序列化/反序列化接口的头文件;
- 抽离公共的json操作函数到公共头文件,这些操作函数通过元数据和偏移的方式处理结构体和json,更深入部分则使用了cJSON库;
- 模块引用2中生成的头文件,然后通过结构体指针,即可完成结构体序列化成json,以及json反序列化成结构体;
花了两天时间来做这些事情,初步测试了下,功能正常,也达到了我预期的一行代码序列化,一行代码反序列化的高级语言的json操作特性;
总之,满意;
C语言JSON序列化/反序列化的更多相关文章
- json序列化 & 反序列化
json序列化: json的dumps方法可以将json格式数据序列为python的相关数据类型,比如str,常用于打印,另外,在序列化时,中文汉字被转换为unicode编码,在dumps函数中添加参 ...
- json序列化反序列化Jackson相关注解
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- nodejs - json序列化&反序列化示例
// demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...
- spring cloud jackson 枚举json互转 枚举json序列化/反序列化
先定义一个枚举基类 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = ...
- JSON序列化反序列化
JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在 ...
- Newtonsoft.Json 序列化反序列化
public class People { public string name { get; set; } public string age { get; set; } public string ...
- 怎样在ASP.NET(C#) 使用Json序列化反序列化问题?
using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serializat ...
- ASP.NET(C#) Json序列化反序列化帮助类Jsonhelper
原文地址:https://ken.io/note/csharp-asp.net-jsonhelper using System; using System.Collections.Generic; u ...
- 关于spring中请求返回值的json序列化/反序列化问题
https://cloud.tencent.com/developer/article/1381083 https://www.jianshu.com/p/db07543ffe0a 先留个坑
随机推荐
- AI人脸识别SDK接入 — 参数优化篇(虹软)
引言 使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.andro ...
- 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
最近Jerry写了一系列关于SAP云平台ABAP编程环境的技术文章,这些文章都是围绕着在云上的ABAP编程环境的具体知识点来分享,比如要完成一个具体的开发需求,所需要的编程步骤.这些文章陆续收到一些读 ...
- DRF 视图初识
from django.shortcuts import render from rest_framework.generics import ListAPIView,CreateAPIView,Up ...
- Struts框架笔记04_拦截器_标签库
目录 1. Struts2的拦截器 1.1 拦截器概述 1.2 拦截器的实现原理 1.3 Struts的执行流程 1.4 拦截器入门 1.4.1 环境搭建 1.4.2 编写拦截器 1.4.3 配置拦截 ...
- centos 7 安装webmin
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.930-1.noarch.rpm yum -y install perl perl- ...
- 【转】CCS5.5从硬盘读入.dat数据格式的单张图像
首页 博客 学院 CSDN学院 下载 论坛 APP CSDN 问答 商城 活动 VIP会员 ...
- php与ajax技术
web2.0的到来,ajax逐渐成为主流,什么是ajax,ajax的开发模式,优点,使用技术.(ajax概述,ajax使用的技术,需要注意的 问题,在PHP应用ajax技术的应用) 什么是ajax,a ...
- [ike][ipsec] child sa rekey机制的细节分析
子标题:ipsec rekey是否会导致丢包 author: classic_tong 前言 什么叫rekey. rekey是指ipsec的通信两端定期更换加密信道秘钥的机制. 为了安全性考虑,随着秘 ...
- raw镜像与qcw2镜像互相转换
qcow2是最小使用,raw是置零使用 . raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的,linux下的文件系统可以很好的支持空洞的特性 ...
- Caused by: org.xml.sax.SAXParseException; lineNumber: 64; columnNumber: 27; The entity name must immediately follow the '&' in the entity reference.
java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...