c++ 解析JSON中的路径

pinkon5k  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(167)

我尝试使用RapidJSON将一个包含path的JSON对象从前端(Node)传递到后端(C++),如下所示:

#include <iostream>
#include "rapidjson/document.h"

int main() {
  const char* json1 = "{\"path\":\"C:\\test.file\"}";                     // works
  const char* json2 = "{\"path\":\"C:\\fol der\\test.file\"}";            // works
  const char* json3 = "{\"path\":\"C:\\fol der\\Test.file\"}";            // ERROR!
  const char* json4 = "{\"path\":\"C:\\few dol\\test.file\"}";            // ERROR!
  const char* json5 = "{\"path\":\"C:\\folder\\anotherOne\\test.file\"}"; // ERROR!
  rapidjson::Document d;
  d.Parse(json3);    // works using json1 or json2
  assert(d.HasMember("path"));
  std::string pathString = d["path"].GetString();
  return 0;
}

前两个字符串可以工作,但是,我不能得到任何更长的路径来工作,甚至大小写也给我带来麻烦(json2json3之间的唯一区别是“T”)。
我如何正确地传递和解析路径(Windows和Linux)?
提前感谢您!

**编辑:**我刚试过nlohman's JSON library,也有同样的问题。
如何在JSON中传递路径???

9rnv2umw

9rnv2umw1#

如果打印json变量,将得到以下结果(C++解释转义字符):

json1: {"path":"C:\test.file"}
json2: {"path":"C:\fol der\test.file"}
json3: {"path":"C:\fol der\Test.file"}
json4: {"path":"C:\few dol\test.file"}
json5: {"path":"C:\folder\anotherOne\test.file"}

现在您可以在任何工具(如https://jsonlint.com/)中测试这些json,但您将收到错误。错误原因是在json3json5的情况下,由“path”表示的字符串不是有效字符串,因为其中存在无效的转义字符。
以下是每个字符串的转义序列列表:
json1具有\t
json2具有\f\t
具有\f\T
json4具有\f\t
json5具有\f\a以及\t
在所有这些转义字符中,\T\a无效,因此json3json5也无效。
现在,如果你想正确地解析它,那么一个简单的方法就是使用四个反斜杠\\\\,例如:

const char* json3 = "{\"path\":\"C:\\\\fol der\\\\Test.file\"}";

相当于C:\fol der\Test.file

相关问题