亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++常用函數(shù)之XML JSON格式轉(zhuǎn)換問題

 更新時間:2020年02月29日 21:04:50   作者:程序員的成長  
XML在Json出現(xiàn)前應(yīng)用很廣泛,靈活性好,應(yīng)用語言也沒有限制,發(fā)展了這么長時間后xml標(biāo)準(zhǔn)已經(jīng)很臃腫。這篇文章主要介紹了C++常用函數(shù)之XML JSON格式轉(zhuǎn)換問題,需要的朋友可以參考下

數(shù)據(jù)格式在編程里面很常見,不同的系統(tǒng)都會有自己的標(biāo)準(zhǔn)。因為給有各的定義,每次做第三方開發(fā)系統(tǒng)對接的時候數(shù)據(jù)格式標(biāo)準(zhǔn)都是頭疼的事情。

在開發(fā)過程中比較常見的比如有Json、XML、Key-Value等。這里我們就先看看Json和XML。兩者的轉(zhuǎn)換有很多開源的代碼可以使用,而且也很完善,可以參考xml2jsonxsltjson。

XML在Json出現(xiàn)前應(yīng)用很廣泛,靈活性好,應(yīng)用語言也沒有限制,發(fā)展了這么長時間后xml標(biāo)準(zhǔn)已經(jīng)很臃腫。這里可以查看XML的標(biāo)準(zhǔn)XML標(biāo)準(zhǔn)。在C++里面解析和操作XML的庫也有不少,tinyxml 就是個不錯的選擇,體積少、簡單、高效的開源庫,現(xiàn)在已經(jīng)發(fā)布了TinyXml-2.

Json出來后立即被很多高級語言作為了標(biāo)準(zhǔn)推薦使用,如果想了解Json的定義請點擊這里:JSON定義

XML2Json & Json2XML

接下來,我想做個簡單的函數(shù)來轉(zhuǎn)換。

<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>

上面的報文是在三方支付里面常見的報文,這次我們來實現(xiàn)對這段報文的Json格式的自由轉(zhuǎn)換。

#include <string>
#include <iostream>
#include "tinyxml2.h"
#include "nlohmann/json.hpp"

using json = nlohmann::json;
using namespace tinyxml2;
using namespace std;

string xml2json(string &src)
{
  XMLDocument doc;
  doc.Parse( src.c_str() );
  
  json root;
  XMLElement* rootElement = doc.RootElement();
  XMLElement* child = rootElement->FirstChildElement();
  while(child) {
    const char* title = child->Name() ;
    const char* value = child->GetText();
    child = child->NextSiblingElement();
    root[title]=value ;
  }
  return root.dump() ;
}

string json2xml(string& src)
{
  XMLDocument xmlDoc;
  XMLNode * pRoot = xmlDoc.NewElement("xml");
  xmlDoc.InsertFirstChild(pRoot);
  auto j3 = json::parse(src.c_str());
  for (json::iterator it = j3.begin(); it != j3.end(); ++it) {
    string key = it.key();
    string value = it.value() ;
    XMLElement * pElement = xmlDoc.NewElement(key.c_str()) ;
    pElement->SetText(value.c_str()) ;
    pRoot->InsertEndChild(pElement);
  }
  XMLPrinter printer;
  pRoot->Accept( &printer );
  return printer.CStr();
}

int main()
{
  string src = "<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>" ;
  string json = xml2json(src) ;
  string xml = json2xml(json) ;

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

這次我們使用tinyxml2 和nlohmann json 做轉(zhuǎn)換,需要將兩者的頭文件和源代碼文件下載,并在編譯中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++常用函數(shù) XML JSON格式轉(zhuǎn)換https://www.cppentry.com/benc...

開發(fā)資料https://www.cppentry.com

知識點擴展:C++常用的系統(tǒng)函數(shù)

數(shù)學(xué)<math.h>:

1 三角函數(shù)

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

2 反三角函數(shù)

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

3 雙曲三角函數(shù)

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

4 指數(shù)與對數(shù)

double exp (double x); e的x次冪
double pow (double x, double y); x的y次冪
double sqrt (double);
double log (double x); 以e為底的對數(shù),即ln x
double log10 (double x);log10(x) 以10為底。

沒有以2為底的函數(shù)但是可以用換底公式解 決:log2(N)=log10(N)/log10(2)

5 取整

double ceil (double); 不小于x的最小整數(shù)
double floor (double); 不大于x的最大整數(shù)

6 絕對值

int abs(int);整型
long labs(long);長整型
double fabs (double);浮點型

7 標(biāo)準(zhǔn)化浮點數(shù)

double frexp (double f, int p); 標(biāo)準(zhǔn)化浮點數(shù), 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*); 將參數(shù)的整數(shù)部分通過指針回傳, 返回小數(shù)部分
double fmod (double, double); 返回兩參數(shù)相除的余數(shù)

9.平方根

double sqrt(double x);

字符<ctype.h>:

int isalpha(int c);c是否為字母
int isdigit(int c);c是否為數(shù)字
int tolower(int c);將c轉(zhuǎn)換為小寫字母
int toupper(int c);將c轉(zhuǎn)換為大寫字母

字符串<string.h>:

char strcpy(char sl,char s2);將字符串s2復(fù)制給s1,即覆蓋
unsigned strlen(char sr);求字符串str長度

內(nèi)存操作<memory.h>:

void memcpy(void d,void *s,int c);將s指向的內(nèi)存區(qū)域的c個字節(jié)復(fù)制到d指向的區(qū)域

類型轉(zhuǎn)換<stdlib.h>:

int atoi(char s);將字符串轉(zhuǎn)化為整數(shù)
char itoa(int v,char *s,int x);將整數(shù)v按x進制轉(zhuǎn)成字符串s

時間<time.h>:

time_t time(time_t *timer);返回1970/1/1零點到目前的秒數(shù)

其他<stdlib.h>:

srand(unsigned seed);設(shè)置隨機數(shù)的種子
int rand();產(chǎn)生0-RAND_MAX的隨機數(shù)
exit(int);終止正在執(zhí)行的程序

keep going

到此這篇關(guān)于C++常用函數(shù)之XML JSON格式轉(zhuǎn)換問題的文章就介紹到這了,更多相關(guān)c++ xml json格式轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)二叉樹層次遍歷介紹

    C語言實現(xiàn)二叉樹層次遍歷介紹

    大家好,本篇文章主要講的是C語言實現(xiàn)二叉樹層次遍歷介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言鏈表實現(xiàn)通訊錄系統(tǒng)課程設(shè)計

    C語言鏈表實現(xiàn)通訊錄系統(tǒng)課程設(shè)計

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實現(xiàn)通訊錄系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++序列操作函數(shù)學(xué)習(xí)最全指南

    C++序列操作函數(shù)學(xué)習(xí)最全指南

    這篇文章主要給大家介紹了關(guān)于C++序列操作函數(shù)學(xué)習(xí)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • C語言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解

    C語言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解

    這篇文章主要為大家詳細(xì)介紹一下C語言中回調(diào)函數(shù)和qsort函數(shù)的用法教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • C++讀寫ini配置文件實現(xiàn)過程詳解

    C++讀寫ini配置文件實現(xiàn)過程詳解

    這篇文章主要介紹了C++讀寫ini配置文件實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • c語言實現(xiàn)數(shù)組循環(huán)左移m位

    c語言實現(xiàn)數(shù)組循環(huán)左移m位

    這篇文章主要介紹了c語言實現(xiàn)數(shù)組循環(huán)左移m位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    本文主要介紹了Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用,這些關(guān)聯(lián)容器在Qt中提供了靈活而強大的數(shù)據(jù)結(jié)構(gòu)選項,根據(jù)具體的需求和使用場景,您可以選擇適合的容器來存儲和管理數(shù)據(jù),感興趣的可以了解一下
    2023-09-09
  • 詳解如何在C/C++中測量一個函數(shù)或功能的運行時間

    詳解如何在C/C++中測量一個函數(shù)或功能的運行時間

    本文算是一個比較完整的關(guān)于在 C/C++ 中測量一個函數(shù)或者功能的總結(jié),最后會演示三種方法的對比,文章通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • C++設(shè)計模式之策略模式(Strategy)

    C++設(shè)計模式之策略模式(Strategy)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之策略模式Strategy ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • c++11 多線程編程——如何實現(xiàn)線程安全隊列

    c++11 多線程編程——如何實現(xiàn)線程安全隊列

    這篇文章主要介紹了c++ 如何實現(xiàn)線程安全隊列,幫助大家更好的理解和學(xué)習(xí)c++的相關(guān)知識,感興趣的朋友可以了解下
    2020-11-11

最新評論