【发布时间】:2017-05-30 11:13:25
【问题描述】:
我们使用 json 格式来存储配置数据,使用 JsonCPP 来处理格式。最近的扩展要求存储一些(Windows)文件路径的字段。并且存储 std::string 工作 - 只要路径不包含任何有趣的东西,比如空格,路径获得引号:C:\my_directory\data.dat 工作正常,但 "C:\my directory\data.dat" 失败,相应的键变成 "path"=""C:\my directory\data.dat"" 哪个json 无效
转义是标准答案,显然我可以编写自己的逃生/逃生,但我不应该重新发明轮子,所以我想问一下是否有一个 - 标准、简单、轻量级的方法是什么(最好没有Boost或同样重的东西)? JsonCPP的一些内置函数,一个使用stdlib的成语/sn-p,一个Windows API库调用?
转义文件路径以存储在 JSON 中的“行业标准”方法是什么?
VC++; Visual Studio 2015、Win10、MFC。
编辑:代码。
std::string SignalControlDialog::GetDlgItemStdString(UINT id)
{
TCHAR entry_tchar[1024];
LPTSTR entry_lptstr = entry_tchar;
GetDlgItemText(id, entry_lptstr, 1024);
std::wstring entry_wstring(&entry_tchar[0]);
std::string entry_string(entry_wstring.begin(), entry_wstring.end());
return entry_string;
}
//...
data->project_file = GetDlgItemStdString(IDC_EDIT1);
//...
Json::Value config;
Json::StyledStreamWriter writer;
config["crossingfile"] = data::project_file;
std::ofstream stream;
stream.open(GetFileName().c_str());
if (stream.fail())
return FALSE;
writer.write(stream, config);
stream.close();
【问题讨论】:
-
在我使用
JsonCPP的测试中,如果您将引号放入,它会自动添加自己的转义字符。您使用了什么代码? -
@Galik:见编辑。
-
如果你这样做会发生什么?
config["crossingfile"] = R"("C:\my directory\data.dat")"; -
@Galik:需要一些时间来告诉我,我现在没有编译环境......
标签: c++ json escaping filepath