qt结构体嵌套结构体方法_Qt_C++JSON转结构体

本文介绍了如何在Qt项目中利用第三方库x2struct将JSON数据转换为C++结构体。通过示例展示了如何定义结构体、转换JSON字符串到结构体以及结构体到JSON字符串的过程。
摘要由CSDN通过智能技术生成

Qt_C++++JSON 转结构体前言

最近在研究 Redis 的是时候,想着传输数据用 JSON 数据格式。但是Qt自带的 QJsonDocument 方式其实也是可以用的,但是我嫌弃(lan)读取 dom 的方式麻烦,

于是网上搜索了一个库来用,做了一些测试,基本功能已经满足,但是还没有深入用,不知道有没有什么坑,不扯远了,有没有坑用了就知道。

今天先给大家分享一个我今天做的 demo,可以实现一些基本数据的读取。

Qt_C++++JSON 转结构体需求说明

我想写入的 JSON 数据格式如下:

{

"name": "C 加加",

"master": 2020,

"members": [{

"id": 1,

"name": "xiaohua",

"mail": "xiaohua@qq.com"

}, {

"id": 2,

"name": "xiaohe",

"mail": "xiaohe@qq.com"

}],

"hobby": {

"id": 1,

"hname": "xiaohuahua",

"hdesc": "xiaohuahua&

1)JSON字符串还原为结构体; 2)访问结构体的字段值; uses SynCommons; const // JSON字符串 JSON1 = '{' + #13#10 + '"glossary": {' + #13#10 + '"title": "中国",' + #13#10 + ' "GlossDiv": {' + #13#10 + '"title": "湖南省",' + #13#10 + ' "GlossList": {' + #13#10 + '"GlossEntry": {' + #13#10 + '"ID": "湘乡市",' + #13#10 + ' "SortAs": "SGML",' + #13#10 + ' "GlossTerm": "Standard Generalized Markup Language",' + #13#10 + ' "Acronym": "SGML",' + #13#10 + ' "Abbrev": "ISO 8879:1986",' + #13#10 + ' "GlossDef": {' + #13#10 + '"para": "A meta-markup language, used to create markup languages such as DocBook.",' + #13#10 + ' "GlossSeeAlso": ["咏南中间件", "XML"]' + #13#10 + '},' + #13#10 + ' "GlossSee": "markup"' + #13#10 + '}' + #13#10 + '}' + #13#10 + '}' + #13#10 + '}' + #13#10 + '}'; type // 记录 TGlossary = record glossary: record title: string; GlossDiv: record title: string; GlossList: record GlossEntry: record ID, SortAs, GlossTerm, Acronym, Abbrev: string; GlossDef: record para: string; GlossSeeAlso: array of string; end; GlossSee: string; end; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); var gloss: TGlossary; json: RawUTF8; begin json := JSON1; RecordLoadJSON(gloss, @json[1], TypeInfo(TGlossary)); Memo1.Clear; Memo1.Lines.Add(gloss.glossary.title); // 中国 Memo1.Lines.Add(gloss.glossary.GlossDiv.title); // 湖南省 Memo1.Lines.Add(gloss.glossary.GlossDiv.GlossList.GlossEntry.ID); // 湘乡市 Memo1.Lines.Add(gloss.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso[0]); // 咏南中间件 end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值