如何使用JSON11库修改JSON对象
How to modify a json object using json11 library?
我已经有一个已经json11对象构建:
Json my_json = Json::object {
{ "key1", "value1" },
{ "key2", false },
{ "key3", Json::array { 1, 2, 3 } },
};
我想为这样的键3阵列添加一个新值:
my_json["keys3"].push_back(4);
我如何实现?我看不到任何修改对象的东西(所有要访问值的操作员都是const!)
不幸的是,似乎您无法直接修改Json
的实例。
这是一个无法访问的JsonValue
周围不透明的包装器。
无论如何,请注意Json::object
是std::map<std::string, Json>
。您可以创建原始Json::object
的副本:
Json::object json_obj = my_json.object_items();
然后键keys3
包含一个Json::array
,那不过是std::vector<Json>
。
您可以按照以下内容进行修改:
json_obj["keys3"].push_back(4);
最后,您必须从Json::object
创建一个新的Json
,仅此而已:
Json another_json = json_obj;
非常昂贵的操作。
我怀疑正确的方法是逐步创建对象,并且在过程的末尾创建一个Json
的实例。
我在github上找到了有关此问题的下一个问题:
- [https://github.com/dropbox/json11/issues/20]:SkyPjack dimply
JSON类型是不变的,但是JSON ::对象类型只是一个 std :: map,因此,如果第一行创建了一个 json ::对象。您可以使用该地图来构建您的任何数据 需要,然后将其作为JSON(DATA)包装,然后将其修改为JSON(数据)。你 还可以使用Object_items()从JSON提取地图,复制它, 将其变异,并使用它来创建一个新的JSON,类似于建造者 模式。
- [https://github.com/dropbox/json11/issues/75]:这很有趣,因为说明为什么无法修改JSON
JSON类型旨在是不变的值类型,其具有 优势的数量,包括线程安全和共享能力 跨副本的数据。如果您想要一个可变的阵列,则可以使用 json :: array(这只是矢量的打字)并将其变异 将其放入JSON对象之前自由。
如果您正在使用JSON11,则可以这样做:
Json json = Json::object
{
{
"num_neurons_in_each_layer", Json::array{ 1000, 1000, 10, 10 }
},
{
"non_editable_data",
Json::object
{
{"train_error", -1.0 },
{"validation_error", -1.0 }
}
}
};
Json* p_error = const_cast<Json*>(&json["non_editable_data"].
object_items().find("validation_error")->second);
*p_error = Json(2.0); //"validation_error" has been modified to 2.0
p_error = nullptr;
delete p_error;
相关文章:
- 有没有办法让编译器在我放置字符串而不是 nlohmann::json 对象时抛出错误?
- 如何使用 picojson.h 在 c++ 中从头开始创建 json 对象
- .value( "key" , default) 不适用于空的 json 对象吗?
- Rapidjson 遍历并获取复杂 JSON 对象成员的值
- JSON对象到C++模型
- 使用 NLOHMANN JSON 在 C++ 中创建嵌套的 JSON 对象
- 如何在 c++ 中从两个向量创建 JSON 对象?
- 如何正确解析 Java+C++ TCP 连接中的 JSON 对象?
- 如何将矢量转换为 json 对象?C++
- 将C++具有 150+ 变量的类转换为 Json 对象
- Poco 迭代嵌套的 JSON 对象
- 如何提取由特定模式分开的JSON对象字符串
- 如何创建具有分层对象和值的 json 对象
- 将 JSON 对象作为参数在 JNI 中传递给 CPP,并在 CPP 中检索 JSON 对象的数据
- 无法区分 JSON 对象/数组/字符串
- 如何将 cpr 的获取响应转换为 json 对象?
- 我正在尝试打开一个 json 文件.并将其存储为 JSON 对象
- 如何在不更改 C++ 中的值的情况下更改 json 对象名称
- 如何将Nolhmann JSON对象分成字符串
- Cpp:Cpp中的JSON解析器,提供支持序列化/反序列化功能,将JSON对象转换为用户定义的类