Protocol buffers 资源内集合上的协议缓冲区字段掩码

Protocol buffers 资源内集合上的协议缓冲区字段掩码,protocol-buffers,Protocol Buffers,如果我想更新下面资源(协议缓冲区)中“f_units”集合中特定元素内的“amount”字段,FieldMask将如何更新amount字段?字段掩码是否对集合的数组索引进行操作 { "f_sel": { "f_units": [ { "id": "1", "amount": { "coefficient": 1000, "exponent": -2 } }, {

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

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

它会是“f_sel.f_units.0.amount”吗?如何使用字段掩码更新金额?

据我所知,无法用字段掩码中的索引替换重复字段的单个元素

相反,您需要更新要更改的f_单位内元素的金额字段,并将FieldMask设置为

"f_sel.f_units"
只需向原始列表发送一个增量就可以稍微提高效率,但很难防止bug。例如,如果同时修改了proto,并且为repeated字段指定的索引(假定有指定索引的方法)不再在范围内,该怎么办


另一方面,它定义了合并时如何处理重复字段的语义。目前,他们似乎打算让您全部替换重复的字段,或者将其附加到目标字段的末尾。这两种合并策略都避免了前面提到的由于指定无效索引而导致的错误。

感谢@Michael的解释。我将引入路径作为我正在设计的API调用请求的一部分,因此我只能期望客户机将集合中特定位置的“金额”字段的增量传递给我。