如何解决因字符串到 json 转换而产生的异常?
How do I solve exception generated due to string to json conversion?
我正在尝试使用 C++ 中 JSON 库的 nlohmann 框架来理解 JSON 到字符串和字符串到 JSON 的转换。但是我遇到了生成异常的问题,我不明白生成异常的原因。
以下是我使用的 nlohmann 框架的代码。我试图创建一个 JSON object "j_string",添加属性 "transformation_matrix" 并向其添加一个相应的值,类型为来自预定义变量 "greetings" 的字符串。现在我正在尝试从字符串转换为 JSON,然后解析它并再次转换为字符串。基本上我试图通过 UDP 发送这些数据,这是我项目背后的全部想法。为此,我需要将字符串转换为 JSON,进行一些计算以提取某个属性的特定值,然后将其转换回字符串并通过 UDP 发送。当我尝试从字符串转换为 JSON 时,编译器出现异常。我用的是Visual Studio 2019,下面是生成的异常:
"Unhandled exception at 0x772718A2 in jsoncpp2.exe: Microsoft C++ exception: nlohmann::detail::type_error at memory location 0x00E9F504."
让我知道为什么会产生这样的异常。当我编译代码时,它说没有错误。但是,当我执行它时,出现异常。我添加了必要的文件和 headers.
#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"
]
为了一般安全,您应该在调用 j_string.get<std::string>()
之前确保 j_string.is_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;
我正在尝试使用 C++ 中 JSON 库的 nlohmann 框架来理解 JSON 到字符串和字符串到 JSON 的转换。但是我遇到了生成异常的问题,我不明白生成异常的原因。
以下是我使用的 nlohmann 框架的代码。我试图创建一个 JSON object "j_string",添加属性 "transformation_matrix" 并向其添加一个相应的值,类型为来自预定义变量 "greetings" 的字符串。现在我正在尝试从字符串转换为 JSON,然后解析它并再次转换为字符串。基本上我试图通过 UDP 发送这些数据,这是我项目背后的全部想法。为此,我需要将字符串转换为 JSON,进行一些计算以提取某个属性的特定值,然后将其转换回字符串并通过 UDP 发送。当我尝试从字符串转换为 JSON 时,编译器出现异常。我用的是Visual Studio 2019,下面是生成的异常:
"Unhandled exception at 0x772718A2 in jsoncpp2.exe: Microsoft C++ exception: nlohmann::detail::type_error at memory location 0x00E9F504."
让我知道为什么会产生这样的异常。当我编译代码时,它说没有错误。但是,当我执行它时,出现异常。我添加了必要的文件和 headers.
#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"
]
为了一般安全,您应该在调用 j_string.get<std::string>()
之前确保 j_string.is_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;