怎么在C++中对XML与JSON格式进行转换

怎么在C++中对XML与JSON格式进行转换?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<xml>
<appid>appid-value111111</appid>
<mch_id>mch_id-value22222</mch_id>
<nonce_str>nonce_str-value3333333</nonce_str>
<transaction_id>transaction_id-value44444444</transaction_id>
<sign>sign-value5555555555</sign>
</xml>

上面的报文是在三方支付里面常见的报文,这次我们来实现对这段报文的Json格式的自由转换。

怎么在C++中对XML与JSON格式进行转换

#include<string>
#include<iostream>
#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="<xml>\
<appid>appid-value111111</appid>\
<mch_id>mch_id-value22222</mch_id>\
<nonce_str>nonce_str-value3333333</nonce_str>\
<transaction_id>transaction_id-value44444444</transaction_id>\
<sign>sign-value5555555555</sign>\
</xml>";
stringjson=xml2json(src);
stringxml=json2xml(json);

cout<<json;
cout<<endl;
cout<<xml;
}

这次我们使用tinyxml2 和nlohmann json 做转换,需要将两者的头文件和源代码文件下载,并在编译中include。

nolhmann json 需要C++ 11 的支持,gcc版本需要在4.7以上。

可以使用下面命令编译:

g++ -std=c++11 xmljson.cpp tinyxml2.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"}
<xml>
<appid>appid-value111111</appid>
<mch_id>mch_id-value22222</mch_id>
<nonce_str>nonce_str-value3333333</nonce_str>
<sign>sign-value5555555555</sign>
<transaction_id>transaction_id-value44444444</transaction_id>
</xml>

C++常用函数 XML JSON格式转换https://www.cppentry.com/benc...

开发资料https://www.cppentry.com

知识点扩展:C++常用的系统函数

数学<math.h>:

1 三角函数

double sin (double);double cos (double);double tan (double);

2 反三角函数

double asin (double); 结果介于[-PI/2, PI/2]double acos (double); 结果介于[0, PI]double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]double atan2 (double, double); 反正切(整圆值), 结果介于[-PI/2, PI/2]

3 双曲三角函数

double sinh (double);double cosh (double);double tanh (double);

4 指数与对数

double exp (double x); e的x次幂double pow (double x, double y); x的y次幂double sqrt (double);double log (double x); 以e为底的对数,即ln xdouble log10 (double x);log10(x) 以10为底。

没有以2为底的函数但是可以用换底公式解 决:log2(N)=log10(N)/log10(2)

5 取整

double ceil (double); 不小于x的最小整数double floor (double); 不大于x的最大整数

6 绝对值

int abs(int);整型long labs(long);长整型double fabs (double);浮点型

7 标准化浮点数

double frexp (double f, int p); 标准化浮点数, f = x 2^p, 已知f求x, p ( x介于[0.5, 1] )double ldexp (double x, int p); 与frexp相反, 已知x, p求f

8 取整与取余

double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分double fmod (double, double); 返回两参数相除的余数

9.平方根

double sqrt(double x);

字符<ctype.h>:

int isalpha(int c);c是否为字母int isdigit(int c);c是否为数字int tolower(int c);将c转换为小写字母int toupper(int c);将c转换为大写字母

字符串<string.h>:

char strcpy(char sl,char s2);将字符串s2复制给s1,即覆盖unsigned strlen(char sr);求字符串str长度

内存操作<memory.h>:

void memcpy(void d,void *s,int c);将s指向的内存区域的c个字节复制到d指向的区域

类型转换<stdlib.h>:

int atoi(char s);将字符串转化为整数char itoa(int v,char *s,int x);将整数v按x进制转成字符串s

时间<time.h>:

time_t time(time_t *timer);返回1970/1/1零点到目前的秒数

其他<stdlib.h>:

srand(unsigned seed);设置随机数的种子int rand();产生0-RAND_MAX的随机数exit(int);终止正在执行的程序

keep going

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。

发布于 2021-03-17 20:54:33
收藏
分享
海报
0 条评论
158
上一篇:css3如何实现小箭头各种图形效果 下一篇:CSS3中box-shadow属性怎么用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码