资源内集合上的协议缓冲区Fieldmask

时间:2018-06-20 04:32:55

标签: protocol-buffers

如果我想更新以下资源(协议缓冲区)中“ f_units”集合内特定元素内的“金额”字段,FieldMask将如何更新金额字段?字段掩码是否对集合的数组索引进行操作?

{
  "f_sel": {
    "f_units": [
      {
        "id": "1",
        "amount": {
          "coefficient": 1000,
          "exponent": -2
        }
      },
      {
        "id": "2",
        "amount": {
          "coefficient": 2000,
          "exponent": -2
        }
      }
    ]
  }
}

是“ f_sel.f_units.0.amount”吗?如何使用FieldMask更新金额?

1 个答案:

答案 0 :(得分:0)

据我所知,没有办法用FieldMask中的索引替换重复字段的各个元素。

相反,您将要更改的f_units中的元素的数量字段更新,并将FieldMask设置为

"f_sel.f_units"

只需要向原始列表发送增量就可以稍微提高效率,但是很难避免错误。例如,如果在此期间修改了原型,并且重复字段的指定索引(假设有一种方法可以指定一个索引)不在范围内,该怎么办?

顺便说一句,Google does propose the concept of MergeOptions定义了在合并时如何处理重复字段的语义。当前,看来他们打算让您全部替换重复的字段或将其附加到目标字段的末尾。这两种合并策略均避免了可能由于指定无效索引而导致的上述错误。