日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ ptree判断是否存在节点_新人报道献礼:关于boost property_tree的一些探讨

發布時間:2025/3/19 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ ptree判断是否存在节点_新人报道献礼:关于boost property_tree的一些探讨 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本人最近工作中要用到c++解析json的方法,故在網上查了不少文章進行學習。

先發點牢騷:找了很多文章,但感覺多數內容雷同,深度不夠,缺乏自己的分析和稍微深入一些的見解。

然后要感謝下面這2篇文章的作者:

http://www.voidcn.com/article/p-smrzeuyb-bud.html

http://einverne.github.io/post/2016/01/boost-learning-note-7.html

花了大約2-3個小時的時間仔細學習了一下,改寫出了下面的一段測試代碼:

#include

#include

#include

using namespace boost::property_tree;

using namespace std;

void test1_2(){

//http://www.voidcn.com/article/p-smrzeuyb-bud.html

std::string const sample = R"(

{

"background": {

"scripts": [ "name1.js", "name2.js", "name3.js" ]

},

"default_popup": "popup.html",

"default_title": "__MSG_name__",

"content_scripts": [ {

"all_frames": true,

"js": [ "name4.js", "name5.js", "name6.js" ],

"match_about_blank": true,

"matches": [ "http://*/*", "https://*/*" ],

"run_at": "document_start"

}, {

"all_frames": true,

"js": [ "include.postload.js" ],

"match_about_blank": true,

"matches": [ "http://*/*", "https://*/*" ],

"run_at": "document_end"

} ]

})";

//printf("sample=%s\n",sample.c_str());

ptree pt;

stringstream stream1(sample);

read_json(stream1,pt);

struct temp_fxn1 {

//ref: basic_ptree public member functions

static int ptree_type(const ptree &pt){

if(pt.size()>0){

if(pt.begin()->first==""){

return 1;//array

}else{

return 2;//object

}

}else{

return 0;//leaf

}

}

};

//遍歷

//for(auto &e : pt){

//故意這樣寫:ref http://einverne.github.io/post/2016/01/boost-learning-note-7.html

for(boost::property_tree::ptree::iterator it = pt.begin(); it != pt.end(); ++it){

auto &e=*it;

printf("===>\n");

std::cout << e.first << ',' << e.second.get_value<:string>()<

printf("~~~~>\n");

for(auto &c : e.second){

std::cout << c.first << "\n";

}

}

}

這段代碼實現了解析任意json字符串的功能(不包括出錯處理),其中temp_fxn1::ptree_type()函數用于判斷一個ptree節點類型。

注1:在解析json str是,只要str本身符合json的預壓就可以生成一顆ptree,并不需要知道json str里面具體有哪些字段。這是多數文章未解決的問題。

注2:本人不喜歡 for(auto &e : pt){...}以及 BOOST_FOREACH 這樣的寫法。

致c++初學者:建議仔細走讀一下這段程序,本人雖然水平不高,但還是花了不少心思的。這段代碼里面包含了不少c++的知識點。

本人從事c++編碼20余年,居然不知道R"..."這樣的寫法,實在慚愧。看來大家在一起交流是很重要的。

總結

以上是生活随笔為你收集整理的c++ ptree判断是否存在节点_新人报道献礼:关于boost property_tree的一些探讨的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。