yaml檔案解析 c 篇

2021-10-13 12:40:08 字數 2659 閱讀 7275

本文使用 c++ 庫 yaml-cpp 對 yaml 檔案進行解析。

cd build

cmake ../

make

得到標頭檔案和.a檔案。將標頭檔案和.a檔案拷貝至工程目錄,在編譯時進行鏈結即可。

注:cmake須3.0以上。

# yaml測試樣例

# null 或 null 為關鍵字,不能寫

# 名稱

# 字串

name: conf file

# 版本

# 如按浮點,2.0會轉換成2

# 如按字串,保留原樣

version: 2.0

# 布林類,轉換為1或0

need: true

# 時間

time: 2020-10-03t09:21:13

empty: nul

# 物件

# 加雙引號會轉義\n,即會換行

my: name: late \n lee

name1: "late \n lee"

age: 99

# 塊text: |

hello

world!

# 陣列

fruit:

# 多級陣列

multi:

sta:

- 110 210 ddd 99

- 133 135 1 2 1588 1509

- 310-410

- 333-444

該示例基本涵蓋了大部分的 yaml 格式。包括:字串,數值、陣列、多級map。

測試**如下:

#include #include "yaml-cpp/yaml.h"

using namespace std;

int main(int argc,char** ar**)

catch (...)

// 獲取型別

for (yaml::const_iterator it = config.begin(); it != config.end(); ++it)

}// 頂層

cout << "version:" << config["version"].as() << endl;

cout << "version(str):" << config["version"].as() << endl;

cout << "need:" << config["need"].as() << endl; // 輸出值為1

cout << "time:" << config["time"].as() << endl;

cout << "empty:" << config["empty"].as() << endl;

try

// 單個取

for (auto item : config["fruit"])

} catch(...)

try

printf("\n");

} catch (...)

// 對於不存在的key,似乎只能用try

try catch (...)

cout << "text:" << config["text"].as() << endl;

// 有兩層

printf("name: %s \nname1: %s \nage: %d\n",

config["my"]["name"].as().c_str(),

config["my"]["name1"].as().c_str(),

config["my"]["age"].as());

return 0;

}

輸出結果如下:

./a.out 

key: name scalar

key: version scalar

key: need scalar

key: time scalar

key: empty scalar

key: my map

key: text scalar

key: fruit sequence

key: multi map

version:2

version(str):2.0

need:1

time:2020-10-03t09:21:13

empty:nul

sizeof array: 6

new sta:

110 210 ddd 99

133 135 1 2 1588 1509

310-410

333-444

key bad not exist...

text:hello

world!

name: late \n lee

name1: late

lee

age: 99

1、name: "late \n lee"輸出會換行。而name: late \n lee則會原樣輸出。

2、引數的值不能為 null 或 null,但可以為nul。

3、如果欄位不存在或非法,會直接報段錯誤,因此需要用try catch讀取。

yaml陣列解析 解析動態Yaml檔案

我有乙個yaml檔案,當前寫為 keys key secret dog values username shiba password inu key secret cat values dbhost localhost words meow 但是,此yaml檔案經常更改,因此每次可以使用不同的值新增...

python解析yaml檔案

yaml是乙個可讀性高,用來表達資料序列的格式。yaml引用了其他多種語言,包括 c語言 python perl,並從xml 電子郵件的資料格式中獲得靈感。目前已經有數種程式語言或指令碼語言支援 或者說解析 這種語言。yaml的語法和其他高階語言類似,並且可以簡單表達清單 雜湊表,標量等資料形態。它...

go解析yaml檔案示例

yaml檔案已經成為配置的一種主要格式,因此各種語言都提供了相應的解析類庫,本文就以go語言中常用的yaml解析庫 gopkg.in yaml為例,簡單展示一下如何解析yaml檔案 具體 在這裡 1,直接將yaml檔案內容解析為我們定義好的struct,這種簡單方便,想獲取對應值,可以直接獲取。2,...