JSON for Modern C ++ _json语法

时间:2017-10-31 23:32:13

标签: c++ json user-defined-literals

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

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

我想知道他们是如何完成这件事的。

我不理解字符串文字_json语法。

2 个答案:

答案 0 :(得分:5)

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的调用。

答案 1 :(得分:-1)

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

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

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