JSON 用于现代 C++ _json 语法

JSON for Modern C++ _json Syntax

JSON for Modern C++ 使用以下语法:

json j = "{ \"happy\": true, \"pi\": 3.141 }"_json;

我想知道他们是如何做到这一点的。

我不明白字符串文字 _ json 语法。

关于 JSON for Modern C++ 的文档: (序列化/反序列化)

请注意,如果不附加 _json 后缀,则不会解析传递的字符串文字,而只是将其用作 JSON 字符串值。也就是说,json j = "{ \"happy\": true, \"pi\": 3.141 }" 只会存储字符串 "{ "happy": true, "pi": 3.141 }" 而不是解析实际对象。

基本上,如果你不把 __json 放在最后,编译器就没有办法知道你打算将它存储为一个 JSON 对象,所以它会将其保存为标准字符串

C++11 向该语言添加了 user defined literals。定义用户定义的字符串文字如下所示:

MyType operator"" _my_udl(char const*, std::size_t);

它的工作方式几乎与常规函数调用完全一样。当您有 "some string"_my_udl 时,编译器会生成对您的 operator"" _my_udl 的调用,其中包含传入的字符串文字和大小。

这就是 Niels Lohmann 的 json 图书馆使用 _json 所做的;这是一个 UDL,相当于对 json::parse.

的调用