如果我有一个包含未知字段的protobuf消息:
leaf1: "Hello"
leaf2: 23
leaf3: 41
4: "world"
其中leaf1,leaf2和leaf3是我的已知字段,4是未知字段。然后我使用protobuf-java-format转换为json,如下所示:
return new JsonFormat().printToString(protobuf);
我得到以下内容:
{"leaf1": "Hello","leaf2": 23,"leaf3": [41], "4": ["world"]}
然而,如果我然后反过来反序列化json:
public static <T extends Message> T convertToProtobuf(String json, T defaultInstance)
throws ParseException {
Builder builder = defaultInstance.newBuilderForType();
JsonFormat format = new JsonFormat();
format.merge(json, ExtensionRegistry.getEmptyRegistry(), builder);
return (T)builder.build();
}
然后我的结果如下:
leaf1: "Hello"
leaf2: 23
leaf3: 41
问题是在重构的原型中不存在作为未知区域的区域4。我做错了什么,还是不支持?谢谢!
答案 0 :(得分:0)
Builder
不支持将未知字段设置为提供的JsonFormat
- 它只会丢弃它们并继续使用剩余的JSON字符串。
JsonFormat
的{{1}}的Javadoc:
将protobuf消息转换为JSON格式或从JSON格式转换的实用程序类。该 JSON格式遵循Proto3 JSON规范,仅遵循proto3 支持功能。 Proto2仅具有功能(例如,扩展和 未知字段)将在转换中被丢弃。那就是 将proto2消息转换为JSON格式,扩展名和未知 字段将被视为不存在。这适用于 proto2消息也包含在proto3消息中。