使用预处理器在c++代码中嵌入JSON作为字符串
Embedding JSON as a string in C++ code using preprocessor
我在Chromium项目中看到了c++和JSON代码的混合。
例如在这个文件中:配置/software_rendering_list_json.cc
这个宏有魔力吗?
#define LONG_STRING_CONST(...) #__VA_ARGS__
它如何"字符串化"任意JSON内容?
Cameron的回答绝对正确。
然而,从c++ 11开始,有一个编译器支持的方法来创建原始字符串字面值。
char const *string = R"someToken({
"name": "software rendering list",
"version": "10.9",
"entries": [
{
"id": 1,
"description": "ATI Radeon X1900 is not compatible with WebGL on the Mac",
"webkit_bugs": [47028],
"os": {
"type": "macosx"
},
"vendor_id": "0x1002",
"device_id": ["0x7249"],
"features": [
"webgl",
"flash_3d",
"flash_stage3d"
]
},
{
"id": 3,
"description": "GL driver is software rendered. GPU acceleration is disabled",
"cr_bugs": [59302, 315217],
"os": {
"type": "linux"
},
"gl_renderer": "(?i).*software.*",
"features": [
"all"
]
}
]
})someToken";
请注意,它们之间有一些细微的差别。
最明显的是,宏将去掉C/c++注释,宏将把所有空白合并成一个空格。
关于字符串字面值的更多细节可以在很多地方找到。我喜欢这个
你猜对了!
宏体中的 #
将随后的标记转换为包含该标记文本的C字符串字面值。在这种情况下,下一个标记是特殊的__VA_ARGS__
宏关键字,它被替换为(可变)宏的所有参数,它对应于源代码中的JSON。
相关文章:
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- POCO C++对象到 JSON 字符串序列化
- 将可变参数模板参数转换为 JSON 字符串
- 从 json 字符串将 QVariant 转换为 QList<MyClass>
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- 使用Python将C 结构更改为JSON字符串
- 如何将变量用作原始 JSON 字符串中的数据?
- 如何将 JsonObject 转换为 JSON 字符串
- 从.txt文件中将C 中的JSON字符串贴上
- 使用 Cereal 反序列化 JSON 字符串
- 使用 jsoncpp 解析 JSON 字符串
- Rapidjson漂亮的打印使用JSON字符串作为作者的输入
- 如何处理JSON字符串中的unicode值
- 为什么BOOST创建的JSON字符串与我的服务器所需的不同
- 如何在C++中使用boost库将类对象转换为json字符串
- 如何在使用JSON boost序列化创建JSON字符串时获取名称-值对
- 如何在网络上序列化并发送JSOn字符串中的std::list
- 将带有 json 字符串的帖子发送到服务器
- 使用 Casablanca REST SDK 将 JSON 字符串转换为C++对象