C结构体与Json字符串自动转换

我们知道在Java中利用Gson这个包可以很方便地将Object和Json进行自动转换(串行化/反串行化)。其原理是利用了Java的反射机制。

最近我的项目中需要将C结构体与Json自动互转。项目背景其实是一个类似protobuf的json协议生成与解析,协议很多,所以我们肯定是希望从一个C结构体的对象自动转成Json,不然协议一条一条自己写,手筋要累断。

要实现这个需求,首先就要给C结构体加入反射机制。我的处理方法是让用户在定义结构体时,额外再定义一个metainfo,用于保存这个结构体的反射信息,如字段名,字段偏移位置等等。

这个实现我在github上发布了代码,项目名叫“cobj”,地址:https://github.com/xphh/cobj,上面README也挺好懂,虽然我写的E文也很累。另外test.c也是可以蛮快上手的。

通过cobj的规则生成的object目前支持:

  • int(整型)
  • CSTR(一种自定义的常量字符串,你可以看作是Java的String,不过得记得要自己释放内存。)
  • BOOL(从int直接typedef的,但是转成Json是true/false)
  • 可以嵌套子结构体
  • 支持int、CSTR、结构体的list(相当于支持泛型),实现为ArrayList

如果你正在找这样的东西,欢迎来使用cobj。

时间: 2024-12-28 18:05:13

C结构体与Json字符串自动转换的相关文章

ios开发-CGRect,CGSize等结构体与NSString字符串互相转换

ios/oc中的结构体如何 转为  一个 NSString 方法呢? 或者一个字符串如何转换为 结构体呢? 系统已经为我们提供了很多好用的方法了! 此处列举一下: 结构体转字符串 NSString *NSStringFromCGPoint(CGPoint point); NSString *NSStringFromCGVector(CGVector vector); NSString *NSStringFromCGSize(CGSize size); NSString *NSStringFrom

60_通过结构体生成json

1.json是跨平台.跨语言的数据交换语言 JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成.尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的.跨平台.跨语言的数据交换语言. package main import ( "encoding/json" &q

C#结构体和字节数组的转换函数

在通信过程中,一般我们都会操作到字节数组.特别是希望在不同语言编程进行操作的时候. 虽然C#提供了序列化的支持,不用字节数组也行.但操作字节数组肯定会碰到. 一般都会采用结构来表示字节数组.但结构与字节数组直接的转换实在很麻烦. 字节操作不但容易出错,而且每增加一个结构,就自己实现一遍,实在是烦不胜烦. 有没有简单的方法呢?当然有.可以采用非托管区的一些方法来实现. 首先,导入命名空间:System.Runtime.InteropServices; 定义结构的时候,要给结构指定特性. 如: //

go语音之进阶篇通过结构体生成json

1.通过结构体生成json 示例: package main import ( "encoding/json" "fmt" ) //成员变量名首字母必须大写 type IT struct { Company string Subjects []string IsOk bool Price float64 } func main() { //定义一个结构体变量,同时初始化 s := IT{"itcast", []string{"Go&qu

JavaScript对象与JSON字符串互相转换详解

JSON是目前互联网数据传输所采用的的主要格式,很多编程语言都有针对JSON的解析器和序列化器,在web前台领域,js对象与JSON字符串的互相转换需求也较为常见. 此文主要讲解js对象和JSON字符串互相转换的方法和一些细节 首先如果需要在开发中使用JSON传输及相应转换需要在html中引入json.js或者json2.js,下载地址:https://github.com/douglascrockford/JSON-js 1.js对象转JSON字符串(序列化) var jsonText = J

C# 对象与JSON字符串互相转换的几种方式

出自:http://blog.csdn.net/testcs_dn/article/details/78150046?locationNum=6&fps=1 目录(?)[-] 方法一DoNet20 需要借助于NewtonsoftJsondll 方法二DataContractJsonSerializer 方法三JavaScriptSerializer 功能对比 性能对比 JSON转C实体类 相关参考 c json数据解析将字符串json格式数据转换成对象 Jsonnet实现方便的Json转Cdyn

[go]结构体和json转换

细说Golang的JSON解析 golang JSON技巧 Go - 如何解析 JSON 数据?mapstruct包 读写结构体 //写[obj,] type user struct { Name string `json:"name"` Age int `json:"age"` } m:= []user{ {"m1",1}, {"m2",2}, } f, _ := os.Create("./data.txt&quo

c# 利用结构体获取json数据

最近做微信支付,要获取用户的openid,调用接口后返回的是json格式的数据,我想在c#后台把数据逐一取出,网上查了查,找到以下方法: 1.首先调用接口,要有一个post数据到指定url并返回数据的函数: protected string PostXmlToUrl(string url, string postData) { string returnmsg = ""; using (System.Net.WebClient wc = new System.Net.WebClient

根据Json字符串自动生成model类(java)

根据Json自动生成Model类 java 将json转换成java类 http://jsongen.byingtondesign.com you bring the json, we'll bring the code 发现一个很不错的网站,能够直接将json字符串生成java model类,超级方便. 很久之前就知道,一直没有用过,昨天在弄G+的数据的时候,用上了. 再结合Gson,你基本上不用做些什么了,很快就能转换成java对象了. 用法:找一个数据很全的json大数据,保存为.json