一个简单易用的数据序列化格式
int
,double
,string
,bool
,Array
,Reference
- 可以没有缩进
- 语句后可以有
;
, 但不是必需的
<xxxx>
- 名字不可重复
- Node:
id: end
- Value:
id = xxx
{}
.
id = a::b::c::id
- 只需
#include "libczh/czh.hpp"
! - 要求 C++ 20
czh::InputMode::file
->str
是路径czh::InputMode::string
->str
是一个存储czh
的字符串
Czh("example: a = 1; end;", czh::InputMode::string);
- 返回名为str的Node。
- 与Node::operator[str]相似,但提供更好的错误提示。
- 当czh中数组存储的数据类型不唯一时,
T
必须是czh::value::Array
auto arr = node["czh"]["any_array"].get<czh::value::Array>();
- 同一Node下的值的类型相同时时,使用
value_map()
获取一个存储了所有key和value的std::map
- 返回
std::map<std::string, T>
auto value_map = example["example"]["arrays"].value_map<vector<int>>();
example:
arrays:
a = {1,2,3}
b = {1,2,3}
end
end
node["czh"]["int_array"] = Range(1, 10); // custom container
node["czh"]["int_array"] = std::ranges::views::iota(1,10); // std::ranges
node["czh"]["int_array"] = {1, 2, 3}; // brace-enclosed initializer list
node["czh"]["any_array"] = {false, 1, "2", 3.0};// czh::value::Array
- 在名为
before
的Node前添加一个值为value
的Node before
默认为空,此时添加在末尾- 返回添加的Node的引用
example["add"].add("add", "123", "abc");
- 在名为
before
的Node前添加一个名为name
的Node - 返回添加的Node的引用
example.add_node("new", "before");
example["example"].remove();
example["example"].clear();
example["a"].rename("b");
- libczh 原生支持三个
writer
Writer | 格式 |
---|---|
BasicWriter | 无格式化 |
PrettyWriter | 格式化 |
ColorWriter | 格式化 + 高亮(ANSI Escape Code) |
- 接受一个
Writer
writer::BasicWriter<std::ostream> w{ std::cout };
node.accept(w);
- 等同于
BasicWriter
- 我们只需写一个满足如下concept的类。
template<typename T>
concept Writer =
requires(T w)
{
{ w.node_begin(std::string()) };
{ w.node_end() };
{ w.value_begin(std::string()) };
{ w.value(value::Value{}) };
{ w.value_ref_path_set_global() };
{ w.value_ref_path(std::string()) };
{ w.value_ref_id(std::string()) };
{ w.value_array_begin() };
{ w.value_array_value(value::Array::value_type{}) };
{ w.value_array_end(value::Array::value_type{}) };
{ w.value_array_end() };
};
- 如果你有任何问题或建议,请提交一个issue或给我发邮件
- 邮箱: cao2013zh at 163 dot com
- 任何贡献都是受欢迎的,只需提一个PR
- libczh 根据 Apache-2.0 license获得许可