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