我们使用json格式来存储配置数据,使用JsonCPP来处理格式。最近的扩展调用了存储某些(Windows)文件路径的字段。并且存储std :: string是有效的 - 只要路径不包含任何有趣的东西,比如空格,路径获得引号:C:\my_directory\data.dat
工作正常,但"C:\my directory\data.dat"
失败,相应的键成为"path"=""C:\my directory\data.dat""
这是无效的json
逃避是标准答案,显然我可以编写自己的逃生/ unescape,但我不应该重新发明轮子,所以我想问一下是否有一个 - 什么是标准的,简单的,轻量级的方法(最好是没有提升或同样重的东西)? JsonCPP的一些内置函数,一个使用stdlib的idiom / snippet,一个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();
答案 0 :(得分:0)
当然,每个体面的JSON库都必须进行转义,自行解决,这是任何序列化库的核心要求。如果JsonCpp没有提供它(没有任何经验),那么你需要考虑切换到其他东西。一些候选人:
我会提到Boost Property Tree的JSON序列化程序,但是你说没有Boost((。