C++常用函数之XML JSON格式转换问题
数据格式在编程里面很常见,不同的系统都会有自己的标准。因为给有各的定义,每次做第三方开发系统对接的时候数据格式标准都是头疼的事情。
在开发过程中比较常见的比如有Json、XML、Key-Value等。这里我们就先看看Json和XML。两者的转换有很多开源的代码可以使用,而且也很完善,可以参考xml2json、xsltjson。
XML在Json出现前应用很广泛,灵活性好,应用语言也没有限制,发展了这么长时间后xml标准已经很臃肿。这里可以查看XML的标准XML标准。在C++里面解析和操作XML的库也有不少,tinyxml就是个不错的选择,体积少、简单、高效的开源库,现在已经发布了TinyXml-2.
Json出来后立即被很多高级语言作为了标准推荐使用,如果想了解Json的定义请点击这里:JSON定义
XML2Json&Json2XML
接下来,我想做个简单的函数来转换。
appid-value111111 mch_id-value22222 nonce_str-value3333333 transaction_id-value44444444 sign-value5555555555
上面的报文是在三方支付里面常见的报文,这次我们来实现对这段报文的Json格式的自由转换。
#include#include #include"tinyxml2.h" #include"nlohmann/json.hpp" usingjson=nlohmann::json; usingnamespacetinyxml2; usingnamespacestd; stringxml2json(string&src) { XMLDocumentdoc; doc.Parse(src.c_str()); jsonroot; XMLElement*rootElement=doc.RootElement(); XMLElement*child=rootElement->FirstChildElement(); while(child){ constchar*title=child->Name(); constchar*value=child->GetText(); child=child->NextSiblingElement(); root[title]=value; } returnroot.dump(); } stringjson2xml(string&src) { XMLDocumentxmlDoc; XMLNode*pRoot=xmlDoc.NewElement("xml"); xmlDoc.InsertFirstChild(pRoot); autoj3=json::parse(src.c_str()); for(json::iteratorit=j3.begin();it!=j3.end();++it){ stringkey=it.key(); stringvalue=it.value(); XMLElement*pElement=xmlDoc.NewElement(key.c_str()); pElement->SetText(value.c_str()); pRoot->InsertEndChild(pElement); } XMLPrinterprinter; pRoot->Accept(&printer); returnprinter.CStr(); } intmain() { stringsrc=" \ "; stringjson=xml2json(src); stringxml=json2xml(json); cout<appid-value111111 \mch_id-value22222 \nonce_str-value3333333 \transaction_id-value44444444 \sign-value5555555555 \这次我们使用tinyxml2和nlohmannjson做转换,需要将两者的头文件和源代码文件下载,并在编译中include。
nolhmannjson需要C++11的支持,gcc版本需要在4.7以上。
可以使用下面命令编译:
g++-std=c++11xmljson.cpptinyxml2.cpp-I./
./a.out {"appid":"appid-value111111","mch_id":"mch_id-value22222","nonce_str":"nonce_str-value3333333","sign":"sign-value5555555555","transaction_id":"transaction_id-value44444444"}appid-value111111 mch_id-value22222 nonce_str-value3333333 sign-value5555555555 transaction_id-value44444444 C++常用函数XMLJSON格式转换https://www.cppentry.com/benc...
开发资料https://www.cppentry.com
知识点扩展:C++常用的系统函数
数学
: 1三角函数
doublesin(double);
doublecos(double);
doubletan(double);2反三角函数
doubleasin(double);结果介于[-PI/2,PI/2]
doubleacos(double);结果介于[0,PI]
doubleatan(double);反正切(主值),结果介于[-PI/2,PI/2]
doubleatan2(double,double);反正切(整圆值),结果介于[-PI/2,PI/2]3双曲三角函数
doublesinh(double);
doublecosh(double);
doubletanh(double);4指数与对数
doubleexp(doublex);e的x次幂
doublepow(doublex,doubley);x的y次幂
doublesqrt(double);
doublelog(doublex);以e为底的对数,即lnx
doublelog10(doublex);log10(x)以10为底。没有以2为底的函数但是可以用换底公式解决:log2(N)=log10(N)/log10(2)
5取整
doubleceil(double);不小于x的最小整数
doublefloor(double);不大于x的最大整数6绝对值
intabs(int);整型
longlabs(long);长整型
doublefabs(double);浮点型7标准化浮点数
doublefrexp(doublef,intp);标准化浮点数,f=x2^p,已知f求x,p(x介于[0.5,1])
doubleldexp(doublex,intp);与frexp相反,已知x,p求f8取整与取余
doublemodf(double,double*);将参数的整数部分通过指针回传,返回小数部分
doublefmod(double,double);返回两参数相除的余数9.平方根
doublesqrt(doublex);
字符
: intisalpha(intc);c是否为字母
intisdigit(intc);c是否为数字
inttolower(intc);将c转换为小写字母
inttoupper(intc);将c转换为大写字母字符串
: charstrcpy(charsl,chars2);将字符串s2复制给s1,即覆盖
unsignedstrlen(charsr);求字符串str长度内存操作
: voidmemcpy(voidd,void*s,intc);将s指向的内存区域的c个字节复制到d指向的区域
类型转换
: intatoi(chars);将字符串转化为整数
charitoa(intv,char*s,intx);将整数v按x进制转成字符串s时间
: time_ttime(time_t*timer);返回1970/1/1零点到目前的秒数
其他
: srand(unsignedseed);设置随机数的种子
intrand();产生0-RAND_MAX的随机数
exit(int);终止正在执行的程序keepgoing
到此这篇关于C++常用函数之XMLJSON格式转换问题的文章就介绍到这了,更多相关c++xmljson格式转换内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。