欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例

 更新時(shí)間:2019年04月08日 11:52:15   作者:stpeace  
今天小編就為大家分享一篇關(guān)于利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

利用rapidjson解析嵌套的json

看json串1:{"system":{"version":"v2.6.1", "name":"value"}}

廢話少說(shuō), 直接擼代碼:

#include <iostream>
#include <stdio.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<sstream>
// 請(qǐng)自己下載開(kāi)源的rapidjson
#include "rapidjson/prettywriter.h"
#include "rapidjson/rapidjson.h"
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
#include "rapidjson/memorystream.h"
using namespace std;
using rapidjson::Document;
using rapidjson::StringBuffer;
using rapidjson::Writer;
using namespace rapidjson;
string getVersion(const string &jvStr)
{
 Document document;
 if (document.Parse(jvStr.c_str()).HasParseError() || !document.HasMember("system")) 
 {
 return "";
 }
 const rapidjson::Value &jvObject = document["system"];
 if(!jvObject.IsObject())
 {
 return "";
 }
 if(!jvObject.HasMember("version"))
 {
 return "";
 }
 const rapidjson::Value &jv = jvObject["version"];
 return jv.GetString();
}
int main(int argc, char *argv[])
{
 string s = "{\"system\":{\"version\":\"v2.6.1\", \"name\":\"value\"}}";
 cout << s << endl;
 cout << getVersion(s) << endl;
 return 0;
}

結(jié)果:

{"system":{"version":"v2.6.1", "name":"value"}}
v2.6.1

再看字符串:{"system": "{\"version\":\"v2.6.1\", \"name\":\"value\"}"}

直接上馬:

#include <iostream>
#include <stdio.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<sstream>
// 請(qǐng)自己下載開(kāi)源的rapidjson
#include "rapidjson/prettywriter.h"
#include "rapidjson/rapidjson.h"
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
#include "rapidjson/memorystream.h"
using namespace std;
using rapidjson::Document;
using rapidjson::StringBuffer;
using rapidjson::Writer;
using namespace rapidjson;
string getStringFromJson(const string &jsStr, const string &strKey) 
{ 
  Document document; 
  if (document.Parse(jsStr.c_str()).HasParseError() || !document.HasMember(strKey.c_str()))  
  { 
    return ""; 
  } 
  const rapidjson::Value &jv = document[strKey.c_str()]; 
  return jv.GetString(); 
} 
int main(int argc, char *argv[])
{
 string s = "{\"system\": \"{\\\"version\\\":\\\"v2.6.1\\\", \\\"name\\\":\\\"value\\\"}\"}";
 cout << s << endl;
 string str = getStringFromJson(s, "system");
 cout << str << endl;
 cout << getStringFromJson(str, "version") << endl;
 return 0;
}

結(jié)果:

{"system": "{\"version\":\"v2.6.1\", \"name\":\"value\"}"}
{"version":"v2.6.1", "name":"value"}
v2.6.1

第二種方式的json串,看起來(lái)太惡心了。

另外,再次強(qiáng)調(diào)一下,json串解析的時(shí)候,容易core dump,所以要做好異常判斷,也要注意類型。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 整理C語(yǔ)言中各種類型指針的特性與用法

    整理C語(yǔ)言中各種類型指針的特性與用法

    這篇文章主要介紹了C語(yǔ)言中各種類型指針的特性與用法整理,需要的朋友可以參考下
    2016-04-04
  • 淺談socket TCP編程中connect的一些坑

    淺談socket TCP編程中connect的一些坑

    下面小編就為大家?guī)?lái)一篇淺談socket TCP編程中connect的一些坑。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C++中高性能內(nèi)存池的實(shí)現(xiàn)詳解

    C++中高性能內(nèi)存池的實(shí)現(xiàn)詳解

    在 C/C++ 中,內(nèi)存管理是一個(gè)非常棘手的問(wèn)題,我們?cè)诰帉?xiě)一個(gè)程序的時(shí)候幾乎不可避免的要遇到內(nèi)存的分配邏輯。本文將通過(guò)C++實(shí)現(xiàn)高性能內(nèi)存池,感興趣的可以了解一下
    2022-10-10
  • C++中內(nèi)存分區(qū)及其作用分析

    C++中內(nèi)存分區(qū)及其作用分析

    C++內(nèi)存分區(qū)包括棧區(qū)、堆區(qū)、全局靜態(tài)區(qū)、常量區(qū),各自負(fù)責(zé)不同的數(shù)據(jù)存儲(chǔ)和回收,棧區(qū)主要用于存放函數(shù)局部變量和參數(shù),堆區(qū)用于動(dòng)態(tài)分配內(nèi)存,全局靜態(tài)區(qū)用于存放全局靜態(tài)變量和靜態(tài)成員變量,常量區(qū)用于存放常量和字符串常量
    2023-04-04
  • C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序

    C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序

    這篇文章主要介紹了利用C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C語(yǔ)言各種符號(hào)的使用介紹下篇

    C語(yǔ)言各種符號(hào)的使用介紹下篇

    C?語(yǔ)言的基本符號(hào)就有?20?多個(gè),每個(gè)符號(hào)可能同時(shí)具有多重含義,而且這些符號(hào)之間相互組合又使得?C?語(yǔ)言中的符號(hào)變得更加復(fù)雜起來(lái)
    2022-08-08
  • Qt實(shí)現(xiàn)可以計(jì)算大數(shù)的簡(jiǎn)單計(jì)算器

    Qt實(shí)現(xiàn)可以計(jì)算大數(shù)的簡(jiǎn)單計(jì)算器

    計(jì)算器是我們生活中很常見(jiàn)的東西,它可以由多種語(yǔ)言多種方式來(lái)實(shí)現(xiàn)。本文主要介紹的是基于C++語(yǔ)言,由QT實(shí)現(xiàn)的可以計(jì)算大數(shù)的簡(jiǎn)單計(jì)算器,需要的可以參考一下
    2022-12-12
  • Qt輸入類控件用法超詳細(xì)講解

    Qt輸入類控件用法超詳細(xì)講解

    Qt是一個(gè)著名的GUI框架,用來(lái)開(kāi)發(fā)和用戶交互的圖形界面,作為GUI框架,豐富的控件和靈活的事件機(jī)制是不可或缺的,Qt在這一方面做得非常優(yōu)秀,下面這篇文章主要給大家介紹了關(guān)于Qt輸入類控件用法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • C++ pair方法與vector方法案例詳解

    C++ pair方法與vector方法案例詳解

    這篇文章主要介紹了C++ pair方法與vector方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++下標(biāo)運(yùn)算符詳解

    C++下標(biāo)運(yùn)算符詳解

    C語(yǔ)言中的下標(biāo)運(yùn)算符用于訪問(wèn)數(shù)組或指針變量中的元素,它使用方括號(hào) [] 來(lái)表示,并在方括號(hào)內(nèi)指定元素的索引位置,本文給大家詳細(xì)的講解一下C++的下標(biāo)運(yùn)算符,需要的朋友可以參考下
    2023-09-09

最新評(píng)論