如何使用变量作为原始JSON字符串中的数据?

时间:2019-06-21 18:08:13

标签: c++ json

我正在使用使用原始JSON字符串的C ++ API。例如:

string data = R"JSON({
            "key1": "value1",
            "key2": "value2"
        })JSON";

我想将变量用作值。例如:

string value1 = "55.2";
string value2 = "3.14";

string data = R"JSON({
            "key1": value1,  //somehow use the string variables here
            "key2": value2
        })JSON";

像这样可能吗?

2 个答案:

答案 0 :(得分:3)

您可以使用operator+连接字符串。

#include <iostream>
#include <string>

int main() {
    std::string value = "55.2";
    std::string str = R"({"key1":)" + value + "}";
    std::cout << str;
}

答案 1 :(得分:2)

如果只需要执行一次,则可以遵循其他答案/评论中的建议,并手动将结果字符串连接起来。

如果您可能还需要做更多的事情(例如,为某个网络API构建巨大的JSON请求或将巨大的响应解析回去),请继续阅读:)

我非常不喜欢使用字符串operator+,字符串流,sprintf或任何其他字符串操作手动连接JSON的想法。

当仅使用数字并且JSON较小时,任何基于字符串连接的解决方案都可能有效,但是如果您需要将字符串值连接到JSON,则一旦遇到{{1} }或字符串中的"字符。您需要进行适当的转义。另外,如果您串联的JSON对象变大,那么维护该代码将是一场噩梦。

解决方案?

如果需要使用C ++,请找到一个为您执行JSON操作的库。有plenty。通常最好使用经过测试的第三方代码来很好地解决此特定任务。是的,开始使用外部依赖关系比手动连接字符串可能要花费更多时间,但这只会使代码变得更好。

如果您的任务与调用网络API和操作JSON密切相关,除非有其他考虑(或除非是编程任务,否则),C ++可能不是最佳选择。现代脚本语言(Python,JavaScript和其他语言)原生支持JSON和网络调用。