我们使用json格式来存储配置数据,使用JsonCPP来处理格式。最近的扩展需要存储一些(Windows)文件路径的字段。和存储的std :: string的工作 - 只要路径不包含任何有趣的,像空间,其中的路径获得引号:C:\my_directory\data.dat
工作正常,但"C:\my directory\data.dat"
失败,相应的按键成为"path"=""C:\my directory\data.dat""
这是无效的JSON转义json文件路径(JsonCPP)
转义是标准答案,很明显,我可以编写自己的escape/unescape,但我不应该重新发明轮子,所以我想问问是否存在 - 标准,简单,轻量级的方法是什么(最好不要Boost或者同样重的东西)? JsonCPP的一些内置函数,一个使用stdlib的成语/片段,一个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
@Galik:see edit。 –
如果你这样做,会发生什么情况?'config [“crossingfile”] = R“(”C:\ my directory \ data.dat“)”;' – Galik