Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ .value(";key";,默认值)是否不适用于空json对象?_C++_Nlohmann Json - Fatal编程技术网

C++ .value(";key";,默认值)是否不适用于空json对象?

C++ .value(";key";,默认值)是否不适用于空json对象?,c++,nlohmann-json,C++,Nlohmann Json,我在使用nlohmann/json库中的value函数时遇到了一些问题。我有一个空的json对象,如果嵌套键被初始化,我想初始化它或增加它。我一直在尝试使用value函数解决此问题,但我一直遇到错误: C++ exception with description "[json.exception.type_error.306] cannot use value() with null" thrown in the test body. 那么,这会不会行不通 nlohmann::json jso

我在使用
nlohmann/json
库中的
value
函数时遇到了一些问题。我有一个空的json对象,如果嵌套键被初始化,我想初始化它或增加它。我一直在尝试使用value函数解决此问题,但我一直遇到错误:

C++ exception with description "[json.exception.type_error.306] cannot use value() with null" thrown in the test body.
那么,这会不会行不通

nlohmann::json json;
std::string i = "1", j = "2", k = "3";
int old_value = json.value(i, nlohmann::json())
                    .value(j, nlohmann::json())
                    .value(k, 0);
json[i][j][k] = old_value + 1;

编辑:对于那些想用更好的方法来做这类事情的人,我已经找到了更好的方法

try {
    json[i][j][k].get_ref<nlohmann::json::number_integer_t &>()++;
} catch (nlohmann::json::type_error & ex) {
    json[i][j][k] = 1;
}
试试看{
json[i][j][k].get_ref()++;
}捕获(nlohmann::json::type_error&ex){
json[i][j][k]=1;
}

它不适用于非对象json值,默认构造函数表示
null
,而不是
{}

从它们的for
值()

例外情况
  • 如果JSON值不是对象,则键入_error.306;在这种情况下,将value()与键一起使用是没有意义的

您必须使用
nlohmann::json(json::value\u t::object)
或其他东西初始化每个对象,才能将其初始化为空对象。

它不适用于非对象json值,默认构造函数表示
null
,而不是
{}

从它们的for
值()

例外情况
  • 如果JSON值不是对象,则键入_error.306;在这种情况下,将value()与键一起使用是没有意义的
您必须使用
nlohmann::json(json::value\u t::object)
或其他东西初始化每个对象,才能将其初始化为空对象