应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

低版本CJson反序列化方案

  现在的API接口普遍使用Json语法来描述,API的返回通常使用类似这样的结构:{code:0,message:,data:{。。。}}
  即所有API都有code和message属性以表示成功或错误,它和业务是无关的;其它属性数据则在data中定义,它和业务是相关的。
  这种情况在CJAVA中做反序列化时一般用泛型表示,如:classMyAPI{publicintx;publicinty;}classApiResponseT{publicintcode;publicstringmessage;publicTdata;}ApiResponseMyAPIrespJsonConvert。DeserializeObject(。。。);
  C的处理方案由于RTTI(RuntimeTypeInformation运行时类型信息)并不包含属性名等信息,无法通过反射找到类结构的属性,因此无法实现CJAVA那种看起来比较优雅的写法。
  github上解决这个问题的项目很多,但它们许多要求使用c17或20以上的版本,由于我的项目限制只能使用c14,因此我只看c11或14的解决方案。
  这些项目的解决方案大体有两类:
  1。提供更友好的读写属性的方法,比如通过〔。。。〕〔。。。〕层层嵌套,让用户更容易读写属性,但是它并没有完成在对象结构实体上的映射和赋值,相当于这个工作得用户来做,因此它更像是只提供了一些序列化反序列化的辅助方法,而不是完整的json和对象转化的解决方案,标星超过3万的https:github。comnlohmannjson就是这种情况;
  2。允许用户用通常的写法去定义类结构,再通过宏去标识需要和json做映射的属性,完成类似其他语言的反射机制,当然它是在编译期实现属性定位而不是其他语言的运行期。
  方案2在使用成本上相较方案1要小很多,也更符合主流方案的习惯。我看了几个项目,最后选了jsonstruct(https:github。comjorgenjsonstruct),它的解决方案是:
  对于一个json串:{One:1,Two:two,Three:3。333}
  定义一个类:structJsonObject{intOne;std::stringTwo;doubleThree;JSOBJ(One,Two,Three);};
  JSOBJ是用于解决反射问题的宏,也可以定义在类外面:structJsonObject{intOne;std::stringTwo;doubleThree;};JSOBJEXT(JsonObject,One,Two,Three);
  反序列化:JS::ParseContextcontext(jsondata);JsonObjectobj;context。parseTo(obj);
  由此可见,除了所有方案都要写的类结构定义之外,为反序列化要做的也就只写几行代码而已,相对方案1是简单了很多的,与CJAVA的解决方案相当。
  回到最初的需求:{code:0,message:,data:{。。。}}
  这个结构是嵌套的,无法使用类似于CJAVA的写法:classMyAPI{publicintx;publicinty;}classApiResponseT{publicintcode;publicstringmessage;publicTdata;}ApiResponseMyAPIrespJsonConvert。DeserializeObject(。。。);
  jsonstruct的文档和examples中也没有提供明确的案例可以参考。
  我试了一下,可以这样来定义:structApiResponse{intcode;stringmessage;JSOBJ(code,message);}structMyApiData{intx;inty;JSOBJ(x,y);}structMyAPI:publicApiResponse{MyApiDatadata;JSOBJ(data);}
  然后这样解析就可以了:JS::ParseContextcontext(。。。);MyAPImyApi;context。parseTo(myApi);
  上述写法,相较CJAVA,CJAVA是用ApiResponse来包MyAPI(泛型传参),C是用MyAPI来包ApiResponse(子类继承),并将子属性data从MyAPI拆出来,相当于多定义了一级,从语法上似乎稍微累赘一点,但整体结构还是清晰直观的。

腾讯ROG游戏手机7系列新品正式发布4月13日,腾讯ROG游戏手机7系列产品正式发布,在性能、散热、屏幕、外观等诸多方面实现越阶升级。骁龙8Gen2旗舰平台高能释放腾讯ROG游戏手机7系列搭载全新一代……国际足球首个国际足联足球经纪人考试报名踊跃新华社日内瓦4月11日电(记者单磊)国际足联11日消息,首个由国际足联授权的足球经纪人考试已经收到六千多份申请。本次考试将在4月19日进行,目前国际足联已收到来自全世界1……核心产品退出医保后,济川药业业绩连创新高近日,济川药业发布2022年年报。年报显示,2022年实现营业收入89。96亿元,同比增长17。9,归属母公司股东的净利润为21。71亿元,同比增长26。27。作为一家集……养老金19连涨,符合这4条能涨更多钱?但不包括以下几类人4月财经新势力根据全国第七次人口普查的数据显示,我国60岁以上的老人超过2。6亿,其中6069岁的低龄老人超过1。47亿,但仅有三分之一在退休后就业,说明,多数老年人,退……从6800万欧元到13。66亿欧元中国车企强势挺进西班牙市场参考消息网4月13日报道据西班牙《国家报》网站4月5日报道,过去几年,西班牙汽车业的生产和销售低迷(由于芯片短缺而变得更加突出)以及欧洲汽车市场的强制电气化进程,为新参与者中国……东软集团业绩变脸上市27年首亏3。43亿研发费增至逾9亿基金长江商报记者明鸿泽商业环境艰难和动荡,经营业绩没有实现预期结果刘积仁如此评价2022年的经营成果。刘积仁是A股公司东软集团(600718。SH)董事长,并在董事长岗……风向彻底变了,扶持国产成果显著,小米华为纷纷弃用三星随着老美新总统的上台,针对打压我国科技的动作变本加厉。目前已经不仅仅是针对华为的限制,只要是国内有一定底蕴的科技企业,几乎统统都被加入到了实体名单里面。老美的霸道行径也是让国内……简单又省事的蒜拌菠菜面片,吃一碗,那叫一个舒坦来源:【昆明日报掌上春城】原料:面粉500g(3入份)、菠菜适量、盐适量、蒜瓣儿适量、味精少许、生抽少许、陈醋适量、香油少许、油泼辣子适量。做法步骤:1……华为任正非最新讲话去年研发经费238亿美元,已完成上万颗器件华为创始人任正非近期在难题揭榜火花奖公司内外的获奖者及出题专家座谈会上表示,华为现在还属于困难时期,但在前进的道路上并没有停步。2022年我们的研发经费是238亿美元,几年后随……交易者注意加密货币市场可能很快会经历大规模崩溃,这是时间表在传统金融体系因大流行而经历危机之后,加密货币被广泛采用并吸引了许多权威人士。从那以后,该空间一直受到密切监视,试图将其置于控制之下。虽然加密货币公司不为人知,但稳定币似乎很快……惊心动魄!孙颖莎恶战7局险胜大黑马,前中国选手成为国乒劲敌乒乓球WTT新加坡大满贯赛激战正酣,北京时间3月17日晚,国乒奥运冠军孙颖莎登场,迎接一匹超级大黑马的挑战,她就是韩国队的华裔选手朱芊曦,结果此前横扫杜凯琹、逆转石川佳纯的朱芊……葵邱书院首届仁春堂杯散文大赛入围作品张英成回家过年刊头题字:尹祥君葵邱书院书画顾问(著名书法家)图网络回家过年文张英成有钱没钱,回家过年!这首歌唱得叫人热血沸腾,激情澎湃。好多年了,作为常年在外打工的游……
王岳伦和李湘离婚都是有征兆的,王岳伦在离婚前就暗示过他会离婚王岳伦和李湘离婚都是有征兆的,王岳伦在离婚前就暗示过他会离婚,曾经在节目组里还卖过惨,他说自己其实很可怜,没有私人空间,由于自己工作原因,所以回家的时间点比较晚。而妻子李湘却不……打了十九个赛季了还是没什么进步!这个新秀真的太气人了本赛季是勒布朗詹姆斯的第十九个赛季,詹姆斯仍然打的是虎虎生风,你光凭肉眼去看,丝毫看不到他一点下滑的迹象!要不是这几个赛季频繁的伤病,你可能都以为这个在联盟征战了十九个赛季的老……腾讯量子研究最新进展首次实现量子开放系统的绝热演化捷径来源:腾讯量子实验室01背景介绍绝热演化是一种在经典和量子系统中均有广泛应用的控制策略。在经典情境下,顾名思义,系统与环境不发生热量交换。而在量子体系中,系统将不会……3年追踪3个冰球少年,揭秘冰上运动从小众冷门到爬藤捷径一场千人冰上艺术节、一部历时3年的冰球纪录片,让汇佳学校成了这个冬天北京最火的地标。1月7日,距离冬奥会开幕还有50天,一部名为《冰上时刻》的纪录电影在全国院线上映,片中……全球首个光轴精英游戏手柄,北通宙斯2最新爆料汇总近年来,在居家时光延长的情况下,游戏外设和主机游戏一起获得了更多用户的青睐,国产品牌北通快速发展,不但产品涵盖了大众到精英旗舰级,而且推出的国产精英级游戏手柄北通宙斯也获得了众……函数整理(TSQL版)一、数学函数1。求绝对值ABS()函数用来返回一个数值的绝对值。SELECTABS(5。38)ASabsValue;2。求指数POWER()函数是用来计……身高2米46,号称姚明接班人!中国第一巨人赵亮为何没打CBA身高2米46,号称姚明接班人!中国第一巨人赵亮为何没打CBA?中国的篮球第一人是谁呢?相信这个答案肯定就是姚明,作为一名篮球运动员,姚明达成的成就是很多美国球星都没有办法……赌王何鸿燊是如何创造5000亿商业帝国,和拿下四房太太的?赌王何鸿燊的一生非常传奇,白手起家,创造5000亿的商业帝国,一生风流,娶四房太太,拥有17位子女,还与利智、邝美云、谢霆锋老妈狄波拉等美人传出过绯闻然而赌王不仅生平传奇……互联网公司的总监,比理发店还多从前每当看到高级职称(title)就会肃然起敬觉得他们遥不可及但是在如今的职场(特别是互联网圈)职称的通货膨胀异常严重可谓遍地CEO,高管满……黑鲨为什么是最好的游戏手机?黑鲨手机是由小米公司旗下的,黑鲨科技、小米科技投资研发的主打游戏电竞的手机品牌,从2021年6月22日开始,黑鲨科技已发布9款手机产品,有黑鲨游戏手机、黑鲨游戏手机Helo、黑……Fami通真三8帝国35分随心所欲的多样战斗据用户Ryokutya2089的速报,即将发售的《真三国无双8:帝国》Fami通评分为35分。《真三国无双8:帝国》:35分(9899)无双的爽快战斗与时时刻刻变化……TES打狼队愣住了!Fly怎么每局都出一件装备,打到苏沫怀疑在KPL第三轮比赛中,众所周知,狼队输给了TES。A,TES也是靠着自己从A组凯旋而归的韧性,一举击败了十二连胜的狼队。可是到了季后赛决定一个战队冠亚军的时刻,TES却愣住了,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网