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

C++使用yaml-cpp庫操作YAML的示例代碼

 更新時間:2024年10月17日 09:18:44   作者:coco_1998_2  
配置文件有利于我們靈活配置工程,解決大量重復(fù)勞動,也方便調(diào)試,YAML?是一種人類可讀的數(shù)據(jù)序列化格式,它使用縮進(jìn)和特定的符號來表示數(shù)據(jù)結(jié)構(gòu),在本文中,我們將詳細(xì)介紹如何在?C++?中使用?yaml-cpp?庫來解析和生成?YAML?格式的數(shù)據(jù),需要的朋友可以參考下

1. YAML 入門教程

基本語法

  • 大小寫敏感
  • 使用縮進(jìn)表示層級關(guān)系
  • 縮進(jìn)不允許使用tab,只允許空格
  • 縮進(jìn)的空格數(shù)不重要,只要相同層級的元素左對齊即可
  • '#'表示注釋

數(shù)據(jù)類型

YAML 支持以下幾種數(shù)據(jù)類型:

  • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):單個的、不可再分的值

YAML 對象

對象鍵值對使用冒號結(jié)構(gòu)表示 key: value,冒號后面要加一個空格。

也可以使用 key:{key1: value1, key2: value2, ...}。

還可以使用縮進(jìn)表示層級關(guān)系;

key: 
    child-key: value
    child-key2: value2

較為復(fù)雜的對象格式,可以使用問號加一個空格代表一個復(fù)雜的 key,配合一個冒號加一個空格代表一個 value:

?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2

意思即對象的屬性是一個數(shù)組 [complexkey1,complexkey2],對應(yīng)的值也是一個數(shù)組 [complexvalue1,complexvalue2]

YAML 數(shù)組

以 - 開頭的行表示構(gòu)成一個數(shù)組:

- A
- B
- C

YAML 支持多維數(shù)組,可以使用行內(nèi)表示:

key: [value1, value2, ...]

數(shù)據(jù)結(jié)構(gòu)的子成員是一個數(shù)組,則可以在該項下面縮進(jìn)一個空格。

-
 - A
 - B
 - C

一個相對復(fù)雜的例子:

companies:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W

意思是 companies 屬性是一個數(shù)組,每一個數(shù)組元素又是由 id、name、price 三個屬性構(gòu)成。

數(shù)組也可以使用流式(flow)的方式表示:

companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

復(fù)合結(jié)構(gòu)

數(shù)組和對象可以構(gòu)成復(fù)合結(jié)構(gòu),例:

languages:
  - Ruby
  - Perl
  - Python 
websites:
  YAML: yaml.org 
  Ruby: ruby-lang.org 
  Python: python.org 
  Perl: use.perl.org

轉(zhuǎn)換為 json 為:

{ 
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org' 
  } 
}

純量

純量是最基本的,不可再分的值,包括:

  • 字符串
  • 布爾值
  • 整數(shù)
  • 浮點數(shù)
  • Null
  • 時間
  • 日期

使用一個例子來快速了解純量的基本使用:

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,F(xiàn)alse都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科學(xué)計數(shù)法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二進(jìn)制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用雙引號或者單引號包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行會被轉(zhuǎn)化成一個空格
date:
    - 2018-02-17    #日期必須使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #時間使用ISO 8601格式,時間和日期之間使用T連接,最后使用+代表時區(qū)

引用

& 錨點和 * 別名,可以用來引用:

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

相當(dāng)于:

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

& 用來建立錨點(defaults),<< 表示合并到當(dāng)前數(shù)據(jù),* 用來引用錨點。

下面是另一個例子:

- &showell Steve 
- Clark 
- Brian 
- Oren 
- *showell 

轉(zhuǎn)為 JavaScript 代碼如下:

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

2. 安裝yaml-cpp庫

yaml-cpp 是一個開源庫, 在github上: https://github.com/jbeder/yaml-cpp . Github上有安裝說明,y用戶可以選擇從源代碼編譯安裝,或者使用包管理器進(jìn)行安裝。

1.從源碼安裝:

mkdir build
cd build
cmake ..

yaml-cpp 默認(rèn)構(gòu)建的就是靜態(tài)庫,也就是 unix 類系統(tǒng)下的 .a 文件,如果你想構(gòu)建動態(tài)庫的話,就需要在 cmake 時指定:

cmake ..  -D BUILD_SHARED_LIBS=ON

編譯成功后,會生成庫文件,你只需要將庫文件和頭文件拷貝到你自己的工程當(dāng)中,就可以使用了。

如果不想每次都 copy 頭文件到不同的工程中,可以將頭文件 copy 到系統(tǒng)默認(rèn)目錄。比如 ubuntu 的地址是 /usr/local/include,將庫文件拷貝到系統(tǒng)默認(rèn)的 lib 文件就好了,比如 ubuntu 是 /usr/local/lib。

有了頭文件和庫,就可以順利寫代碼了。

2.使用 APT 命令安裝:

sudo apt install libyaml-cpp-dev

3. 生成 YAML 示例

1. yaml文件格式

name: John
age: 25
hobbies:
  - reading
  - coding

2.C++代碼

#include <iostream>
#include <fstream>
#include <yaml-cpp/yaml.h>
 
// g++ -o yaml_example yaml_sample_gen.cpp -lyaml-cpp
 
int main() {
    // 創(chuàng)建YAML節(jié)點
    YAML::Node config;
    config["name"] = "John";
    config["age"] = 25;
    config["hobbies"].push_back("reading");
    config["hobbies"].push_back("coding");
 
    // 寫入YAML文件
    std::ofstream fout("output.yaml");
    fout << config;
    fout.close();
 
    return 0;
}

在上面的示例中,我們首先創(chuàng)建了一個YAML節(jié)點,并將數(shù)據(jù)填充到節(jié)點中。然后,我們使用<<運(yùn)算符將YAML節(jié)點寫入output.yaml文件中。 

3.g++編譯命令

g++ -o yaml_example yaml_sample_gen.cpp -lyaml-cpp

4.CMakeList 進(jìn)行編譯

cmake_minimum_required(VERSION 3.5)

# 項目名稱
project(YamlExample)

# 設(shè)置 C++ 標(biāo)準(zhǔn)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找 yaml-cpp 庫
find_package(yaml-cpp REQUIRED)

# 包含 yaml-cpp 頭文件
include_directories(${YAML_CPP_INCLUDE_DIR})

# 添加可執(zhí)行文件
add_executable(yaml_example main.cpp)

# 鏈接 yaml-cpp 庫
target_link_libraries(yaml_example ${YAML_CPP_LIBRARIES})

以上就是C++使用yaml-cpp庫操作YAML的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C++ yaml-cpp操作YAML的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論