JsonCpp - 修改对象数组

JsonCpp - modify an array of objects

我在 JsonCpp::Value 中有以下对象数组:

[{"foo": "bar", "baz": ["Hello", "World"]},
{"Hello": "99bottles", "baz": ["bar", "foo"]},
{"beer": "hello", "world": ["foo"]}.... ]

我必须遍历它们并交替它们(删除一些元素,添加另一个元素)。

我可以使用以下方法轻松迭代 JsonArray:

for (Json::Value::ArrayIndex i = 0; i != array.size(); i++) {
  doc[i] = Json::Value();
  Json::Value result = array.get(i, Json::Value());
  std::cout<<"-------------------"<<std::endl;
  std::cout<<result.toStyledString()<<std::endl;
}

但是 array.get() returns 对象的副本。我将无法修改对象本身。我可以创建一个新数组并根据原始数组的值用新对象填充它,但这会非常昂贵。

“就地”使用 JsonCpp 是否可以实现我的目标?并避免额外的内存开销?

您使用的 get() 必须 return 一个值而不是一个引用,因为您可以使用无效的 i 调用 with 并且它将 return 默认值你提供的价值。 IE。对于大小为 2 的数组,您应该能够调用 array.get(17, Json::Value()) 并且您将返回默认初始化的 Json::Value.

如果你确定元素存在,这里就是这种情况,你可以使用array[i],这会给你一个参考。请注意,您还需要将 result 的类型更改为 Json::Value &,否则您仍然会得到一个副本。

请注意,这一切都在 API documentation for JsonCpp 中显示和解释。我自己从未使用过这个库,以上所有信息都是我从该页面获得的。