【问题标题】:JsonCpp - modify an array of objectsJsonCpp - 修改对象数组
【发布时间】:2021-04-13 11:23:34
【问题描述】:

我在 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() 返回一个对象的副本。我将无法修改对象本身。我可以创建一个新数组并根据原始数组的值用新对象填充它,但这会非常昂贵。

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

【问题讨论】:

    标签: c++ jsoncpp


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2013-05-17
      相关资源
      最近更新 更多