【问题标题】:Preparing C++ Json Request准备 C++ Json 请求
【发布时间】:2019-11-20 18:53:30
【问题描述】:

我正在尝试使用 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;
  • 继续,你真的不应该尝试自己创建或解析 JSON,它真的很复杂。找一个库来帮助你,有很多 C++ 和 C 库可供你使用。

标签: c++ json string c++14


【解决方案1】:

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}";
    

    【讨论】:

      【解决方案3】:
        std::string key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        std::string data = "{\n"
        "    \"foo\": ";
        data += key;
        data += "\n"
        "}";
      

      【讨论】:

        【解决方案4】:

        你肯定可以按照别人的建议去做:

        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"
        //    }
        

        【讨论】:

          猜你喜欢
          • 2022-11-25
          • 1970-01-01
          • 2021-10-03
          • 2016-09-17
          • 2013-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-24
          相关资源
          最近更新 更多