转义 json 的文件路径 (JsonCPP)
escaping file paths for json (JsonCPP)
我们使用json格式来存储配置数据,使用JsonCPP来处理格式。最近的扩展要求存储某些 (Windows) 文件路径的字段。存储 std::string 就可以了 - 只要路径不包含任何有趣的东西,比如空格,路径在其中获取引号:C:my_directorydata.dat
工作正常,但"C:my directorydata.dat"
失败,相应的键变得"path"=""C:my directorydata.dat""
无效的 json
逃避是标准答案,显然我可以写我自己的逃避/取消逃避,但我不应该重新发明轮子,所以我想问是否有一个 - 标准、简单、轻量级的方法是什么(最好没有 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();
当然,每个像样的 JSON 库都必须进行转义,取消转义本身,这是任何序列化库的核心要求。如果 JsonCpp 没有提供它(没有任何经验),那么您需要考虑切换到其他东西。一些候选人:
- Json for Modern C++,顾名思义,您必须至少具有 C++-11 兼容版本。
- Picojson,仅标题易于使用的库。
我会提到 Boost 属性树的 JSON 序列化程序,但你说没有 Boost((.
相关文章:
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从函数角度看ID到文件路径的内部与外部映射
- 使用jsoncpp库时出现链接问题
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 使用 jsoncpp 解析 json 数组字符串
- 如何转换真实路径 CString c++
- 从 GUID 获取 USB 卷路径
- 查找 GCD:并非所有控制路径都返回值
- C++17 文件系统::remove_all 带有通配符路径
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- 转义 json 的文件路径 (JsonCPP)