2017-05-30 586 views
0

我们使用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(); 
+0

在使用我的测试'JsonCPP'如果你把引号,它会自动将其自身的转义字符是什么代码。你使用了什么? – Galik

+0

@Galik:see edit。 –

+0

如果你这样做,会发生什么情况?'config [“crossingfile”] = R“(”C:\ my directory \ data.dat“)”;' – Galik

回答

0

当然,每个体面的JSON库都必须进行转义,避开自身,这是任何序列化库的核心要求。如果JsonCpp没有提供它(没有任何经验),那么你需要考虑切换到别的东西。一些考生:

我要提到的JSON序列化的加速属性树,但你说没有提升((。