Boost學習之讀寫json

2021-10-04 22:22:24 字數 2442 閱讀 1877

較複雜的json示例

寫在結尾

昨天寫了《

boost學習之讀寫ini檔案》,發現boost不止可以讀寫ini檔案,還可以很方便的讀寫json檔案。之前在c++中讀寫json比較抽象,從boost的語法可以很輕鬆的看出來。與讀寫ini一樣,json格式,在boost中也被抽象為

property_tree。

boost中json資料型別

在構建json檔案時,我們只需要構建多個tree節點,按照對應的樹形結構組合在一起即可。從boost寫json檔案api原始碼可以看出,property_tree支援三種型別,分別是valuearrayobject

boost寫json核心原始碼

以下**段,是boost寫入json核心**。

template

<

class

ptree

>

void

write_json_helper

(std::basic_ostream<

typename ptree::key_type::value_type>

&stream,

const ptree &pt,

int indent,

bool pretty)

else

if(indent >

0&& pt.

count

(str()

)== pt.

size()

)if(pretty) stream <<

str(

4* indent,ch(

' '));

stream <

']');}

else

if(pretty) stream <<

str(

4* indent,ch(

' '));

stream <

'}');}

}

簡單的json示例

構造簡單json示例

看完原始碼,下面將按照三種不同型別構造乙個簡單地json檔案

void

build_json()

執行結果

,"1":,

"2":

}

簡單json解析示例

一般有寫入就有讀取,下面示例**,將結合上述json結構,讀取相關資訊,並列印

void

read_json()

}

執行結果

可以看出,json是按照鍵值對儲存,讀取時,通過鍵獲取相對應的值。

較複雜的json示例

構造較複雜的json

void

build_json()

執行結果

,"10":,

"20":,

"1":[,

,],"2":[

,,],

"object"

:}

較複雜的json讀取
void

read_json()

ptree objnode = node.

get_child

("object");

for(boost::property_tree::ptree::iterator it = objnode.

begin()

; it != objnode.

end();

++it)

// 獲取陣列物件,先獲取迭代器首位址,然後按照鍵值對獲取值

ptree arr = node.

get_child

("1");

boost::property_tree::ptree::iterator it = arr.

begin()

; cout << it-

>second.get

("a"

)<< endl;

cout << it-

>second.get

("marble"

)<< endl;

it++

; cout << it-

>second.get

("tom"

)<< endl;

it++

;}

執行結果

寫在結尾

c 使用boost去讀寫json

這兩天剛好寫乙個小玩具需要用到讀寫配置檔案,趁機學習了c 的boost 讀寫庫 對於上面乙個位於 etc erverconfig結構簡單的json檔案,讀取的方式如下 include include boost property tree ptree root 建立乙個結構物件 boost prop...

json讀寫檔案

jsonc 寫配置檔案比較簡單,並且解析配置檔案也比較省事。寫配置檔案 cpp view plain copy include include include include include inc json.h define config file config.json typedef stru...

boost學習筆記之noncopyable

先來看乙個例子 include using namespace std class test public test cout test 如果在類中沒有顯式地宣告乙個拷貝建構函式,那麼,編譯器將會自動生成乙個預設的拷貝建構函式,該建構函式完成物件之間的位拷貝,位拷貝又稱淺拷貝。也就是說預設的c 類是...