如何解决由于字符串到json转换而生成的异常?

时间:2019-05-03 18:03:30

标签: c++ json nlohmann-json

我正在尝试使用C ++中用于JSON库的nlohmann框架理解JSON到字符串和从字符串到JSON的转换。但是,我在生成异常时遇到了问题,并且不了解生成异常的原因。

以下是我在nlohmann框架中使用的代码。我试图创建一个JSON对象“ j_string”,添加属性“ transformation_matrix”,并向其添加对应的值,其类型来自预定义变量“ greetings”。现在,我尝试从字符串转换为JSON,然后解析它,然后再次转换为字符串。基本上,我试图通过UDP发送这些数据,这是我项目的全部想法。为此,我需要从字符串转换为JSON,进行一些计算以提取属性的某个值,然后将其转换回字符串并通过UDP发送。当我尝试从字符串转换为JSON时,从编译器获取异常。我正在使用Visual Studio2019。以下是生成的异常:

“ jsoncpp2.exe中0x772718A2处未处理的异常:Microsoft C ++异常:内存位置0x00E9F504处的nlohmann :: detail :: type_error。”

让我知道为什么会产生这种异常。当我编译代码时,它说没有错误。但是,当我执行它时,会出现异常。我添加了必要的文件和标题。

#include<iostream>
#include<sstream>
#include<nlohmann/json.hpp>

using json = nlohmann::json;

int main() {
    std::string greetings = "greetings from string";
    json j_string;
    j_string["transformation matrix"] = greetings;

    auto cpp_string = j_string.get<std::string>();

    std::string serialized_string = j_string.dump();

    std::cout << serialized_string << '\n';
}

我的预期结果是:

[
"transfornation matrix" : "greetings from string"
]

1 个答案:

答案 0 :(得分:0)

为了安全起见,在致电j_string.is_string()之前,请确保j_string.get<std::string>()以避免此类异常。

此外,请注意,由于您刚刚将对象样式分配与j_string["transformation matrix"] = greetings;一起使用,因此j_string成为 object 类型。如果您直接将字符串分配给j_string,它将采用 string 类型。

the nlohmann/json examples的前两行对此进行了介绍。

// create an empty structure (null)
json j;

// add a number that is stored as double (note the implicit conversion of j to an object)
j["pi"] = 3.141;