准备 C++ Json 请求。

3

我正在尝试使用C++准备JSON请求,就像这样:

string key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

std::string data = "{\n"
"    \"foo\": key\n"
"}";

当我打印这个时,它会显示为:


"foo": key

但我需要的是这样的:

但我需要像这样:

"foo": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

所以,请有人帮助我。怎样做呢?提前致谢。

首先,为了帮助您解决问题,C++编译器不会解析字符串字面量的内容,以查找变量或其他表达式。幸运的是,您可以使用普通的+运算符将内容附加到std::string对象上。例如:std::string a = "a", b = "b", ab = a + b; - Some programmer dude
2
为了继续,你真的不应该尝试自己创建或解析JSON,这非常复杂。找一个库来帮助你,有相当多的C++和C库可供使用。 - Some programmer dude
可能是 https://dev59.com/q1oT5IYBdhLWcg3w-TRV 的重复问题。 - StoryTeller - Unslander Monica
4个回答

3

C++在字符串常量内不会展开变量,因此如果字符串中有 "key" ,它将仅被解释为字符串 "key" 而不是被扩展为变量。

你想做的是将变量 "key" 的内容与其余部分连接起来。在C ++中,你可以使用连接运算符 "+" 来实现这一点。

因此,你需要像下面这样进行操作:

std::string data = "{\n"
"    \"foo\": " + key + "\n"
"}"

2
你不能指望字符串key被变量key的值替换。虽然有些语言支持字符串插值,但据我所知,c++不支持。你可以通过将key之前的字符串、keykey之后的字符串连接起来来创建json字符串。"最初的回答"
std::string data = "{\n \"foo\": " + key + "\n}";

1
  std::string key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  std::string data = "{\n"
  "    \"foo\": ";
  data += key;
  data += "\n"
  "}";

1
你肯定可以做别人建议的事情:

(保留HTML标记)

std::string data = "{\n\"foo\":" + key + "\n}";

但您可以使用(我建议您使用)一个很好的库,叫做nlohmann::json。
然后执行:
nlohmann::json j;
std::string k{"123-ABC"};
j["foo"] = k;
std::cout << j.dump();
//prints {"foo":"123-ABC"}
std::cout << j.dump(2);
//prints:
//    {
//      "foo": "123-ABC"
//    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接