如何为重复字段的字段指定字段掩码?
How do I specify field masks for a field of a Repeated Field?
假设您有一个定义如下的原型:
message Zoo {
repeated Cat cats = 1;
}
假设猫长这样:
message Cat {
google.protobuf.StringValue name = 1
Decimal age = 2;
}
如果我想减少 Zoo 中的数据量,使示例数据仅包含 Cat
和名称字段,我该怎么做?
示例:
示例 Zoo 对象将如下所示:
{
Cat: [{
name = "sam";
},
{
name = "hester";
}]
}
我正在尝试使用一个字段掩码来执行此操作:
FieldMask zoo_mask = FieldMask.newBuilder()
.addPaths("cats")
.build();
Zoo getMaskedZoo(FieldMask mask, Zoo zoo) {
Zoo.Builder zooDest = Zoo.newBuilder();
FieldMaskUtil.merge(zoo_mask, zoo, zooDest);
return zooDest.build();
}
如何才能让每个 Cat
只显示名称?
我刚刚检查了 Java implementation,Java 不支持它,因为 cats 是一个重复的字段。 c-core.
也不支持
您最好的选择是使用反射来实现您的目标。
A repeated field is not allowed except at the last position of a field mask.
假设您有一个定义如下的原型:
message Zoo {
repeated Cat cats = 1;
}
假设猫长这样:
message Cat {
google.protobuf.StringValue name = 1
Decimal age = 2;
}
如果我想减少 Zoo 中的数据量,使示例数据仅包含 Cat
和名称字段,我该怎么做?
示例: 示例 Zoo 对象将如下所示:
{
Cat: [{
name = "sam";
},
{
name = "hester";
}]
}
我正在尝试使用一个字段掩码来执行此操作:
FieldMask zoo_mask = FieldMask.newBuilder()
.addPaths("cats")
.build();
Zoo getMaskedZoo(FieldMask mask, Zoo zoo) {
Zoo.Builder zooDest = Zoo.newBuilder();
FieldMaskUtil.merge(zoo_mask, zoo, zooDest);
return zooDest.build();
}
如何才能让每个 Cat
只显示名称?
我刚刚检查了 Java implementation,Java 不支持它,因为 cats 是一个重复的字段。 c-core.
也不支持您最好的选择是使用反射来实现您的目标。
A repeated field is not allowed except at the last position of a field mask.