我尝试使用RapidJSON将一个包含path
的JSON对象从前端(Node)传递到后端(C++),如下所示:
#include <iostream>
#include "rapidjson/document.h"
int main() {
const char* json1 = "{\"path\":\"C:\\test.file\"}"; // works
const char* json2 = "{\"path\":\"C:\\fol der\\test.file\"}"; // works
const char* json3 = "{\"path\":\"C:\\fol der\\Test.file\"}"; // ERROR!
const char* json4 = "{\"path\":\"C:\\few dol\\test.file\"}"; // ERROR!
const char* json5 = "{\"path\":\"C:\\folder\\anotherOne\\test.file\"}"; // ERROR!
rapidjson::Document d;
d.Parse(json3); // works using json1 or json2
assert(d.HasMember("path"));
std::string pathString = d["path"].GetString();
return 0;
}
前两个字符串可以工作,但是,我不能得到任何更长的路径来工作,甚至大小写也给我带来麻烦(json2
和json3
之间的唯一区别是“T”)。
我如何正确地传递和解析路径(Windows和Linux)?
提前感谢您!
**编辑:**我刚试过nlohman's JSON library,也有同样的问题。
如何在JSON中传递路径???
1条答案
按热度按时间9rnv2umw1#
如果打印json变量,将得到以下结果(C++解释转义字符):
现在您可以在任何工具(如https://jsonlint.com/)中测试这些json,但您将收到错误。错误原因是在
json3
和json5
的情况下,由“path”表示的字符串不是有效字符串,因为其中存在无效的转义字符。以下是每个字符串的转义序列列表:
json1
具有\t
json2
具有\f
和\t
具有
\f
和\T
json4
具有\f
和\t
json5
具有\f
和\a
以及\t
在所有这些转义字符中,
\T
和\a
无效,因此json3
和json5
也无效。现在,如果你想正确地解析它,那么一个简单的方法就是使用四个反斜杠
\\\\
,例如:相当于
C:\fol der\Test.file