转义json的文件路径(JsonCPP)

时间:2017-05-30 11:13:26

标签: c++ json escaping filepath

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

1 个答案:

答案 0 :(得分:0)

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

我会提到Boost Property Tree的JSON序列化程序,但是你说没有Boost((。