【问题标题】:How do I solve exception generated due to string to json conversion?如何解决由于字符串到 json 转换而产生的异常?
【发布时间】:2019-05-04 02:14:30
【问题描述】:

我正在尝试使用 C++ 中 JSON 库的 nlohmann 框架来了解 JSON 到字符串和字符串到 JSON 的转换。但是我遇到了生成异常的问题,我不明白生成它的原因。

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

“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"
]

【问题讨论】:

  • 我没有我的开发者。环境关闭,但如果我没记错的话,如果你给它非 utf8 输入,nlohmann 的 json 就会抛出。按照标准是违法的。尝试捕获异常。这是一个疯狂的猜测。
  • 对不起,我对 JSON 很陌生。什么是 UTF8?为什么是非法的?
  • UTF8 是 JSON 中唯一合法的字节组合。如果我没记错的话,nlohmann 的 json 非常擅长发出信号。 UTF8 是它自己的一章,但它不是魔法,它只是个麻烦事。简介:UTF8 everywhere

标签: c++ json nlohmann-json


【解决方案1】:

为了一般安全,您应该在致电j_string.get&lt;std::string&gt;() 之前确保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;

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多