CXON库CXON是C ++序列化接口CXON将JSON ( UTF-8编码)实现为序列化格式(基于文本的数据格式的示例)CXON实现CBOR作为序列化格式(二进制数据格式的示例)CXON易于扩展不同格式和类型的类型CXON是C++11符合的,自我包含和紧凑的标头库尽管CXON是一个序列化库,但其目标是实际与JSON / CBOR /等竞争。图书馆,例如Boost.JSON / RapidJSON /等。它的主要优点是,无需中间类型来表示数据 - 可以使用与该数据匹配的任何C++类型。
# include " cxon/json.hxx "
# include " cxon/lib/std/vector.hxx " // for <vector>
# include < cassert >
int main () {
std::vector< int > cxx; // or std::array, std::list, std::set, etc.
// the input is a JSON array, semantically a list of integers
auto result = cxon::from_bytes (cxx, " [1, 2, 3] " );
assert (result);
// the data is loaded successfully, no additional semantic validation is needed, so
assert (cxx == (std::vector< int > { 1 , 2 , 3 }));
}成功的估算性意味着输入在句法上和语义上是正确的。
其他此类库代表具有多态性类型(称为DOM , value等)的任意数据,并且成功解析输入数据仅表示其在语法上是正确的。
// pseudo code
value_type json = json_lib::parse( " [1, 2, 3] " );
assert (json.has_parsing_errors()); // check for syntax errors
// check the semantics, expected is a list of integers
assert (json.is_array()); // check the type
auto & array = json.get_array();
assert ( // check the values
array.size() > ... &&
array[0].is_integer() &&
array[1].is_integer() &&
array[2].is_integer() &&
...
);
// the input is semantically correct, but
// the values still need special attention
int x0 = array[ 0 ].get_integer(); // it's an int, but not quite
...为了实现这一目标,一些库提供了将值类型转换为C++类型的实用程序 - 例如Boost.JSON提供value_from / value_to 。
为了完整性, CXON还为与这些库提供的功能相匹配的受支持格式提供了多态性类型(称为node )。
性能通常很重要,并且在许多图书馆中强调,在这方面, CXON接近替代方案。
许多图书馆强调浮点序列化和避免性能。 CXON默认使用<charconv> (具有C++11的后备实现),但可以通过定义CXON_USE_BOOST_CHARCONV来配置为使用boost::charconv 。
请注意,基于多态类型的库具有验证和使用开销,应考虑到这些开销。
内存管理通常很重要。 CXON一般不会分配,而是所提供的类型。
在上面的示例中,内存管理将由std::vector及其分配器完全处理。
CXON提供的多态性类型符合分配。
CXON是非投入的,只要涉及的连续剧不投掷。
CXON定义并实现了类似于C++17 'S <charconv>的接口。
CXON扩展了<charconv>的接口:
Format traits )Interface )这些特征可以是有状态或无状态的,允许任意复杂格式。
命名参数可以是编译时间或运行时,可以为实现提供灵活性。
有关界面的更多信息可以在MANUAL中找到。
CXON支持C++的基本,化合物和标准库类型的大部分。
可以使用侵入性和非侵入性方法将CXON扩展为任意类型。
可以在MANUAL中找到更多细节。
JSON该实施严格符合RFC8259 / ECMA-404 。
CXON/JSON还提供了多态性类型cxon::json::node可以代表任意的JSON数据。
CBOR实施符合RFC7049 。
CXON/CBOR还提供了可以代表任意CBOR数据的多态性cxon::cbor::node 。
CXCF CXCF是从JSON得出的简单配置格式。
使用默认值( <charconv> )数字转换的CXON进行验证。
CXON使用默认值( <charconv> )数字转换序列化。
CXON二元尺寸和编译时间。
有关基准和其他基准结果的信息,请参见此处。
注意:BOOST.JSON和RACICJSON使用默认情况下使用更快但不精确的数字解析算法。在基准测试中,它们通过启用完整精确的测试。
鉴于基准结果并假设将库与CXON进行比较,因此可以说CXON满足了零离心的原理。
CXON需要C++11兼容的编译器,用g++ >= 5 , clang++ >= 4.0和msvc++ >= 19.16 (请参阅构建)。
CXON使用<charconv>进行数字转换(如果有)。
如果不是(例如,前C++17 )将使用后备实现(基于strto*和sprintf )。
如果定义了CXON_USE_BOOST_CHARCONV ,则将使用boost::charconv 。这将为C++11/14和<charconv>的一些早期实现提供良好的性能提升。
CXON是一个仅标题库 - 复制所需的标题,或使用提供的MakeFile将其安装在POSIX Systems:
$ sudo make install或使用:
$ make check欢迎任何形式的贡献(反馈,建议,代码,测试,文档等)。
通过github联系(即使只是一个问题或评论,也会创建问题)或通过邮件进行联系。
根据MIT许可分发。有关更多信息,请参见LICENSE 。
github