一、json转protobuf后判断某字段是否被赋值
方法1:
//hasButtonDelayTime()返回false是json转protobuf时没给ButtonDelayTime赋值,它依然是默认值
CbiMsg.Button button = proto.getButton().getListList().get(j);
System.out.println(button.hasButtonDelayTime());
方法2:字段很多时可以公共方法比方法1方便
CbiMsg.MsgProto.Builder proto = CbiMsg.MsgProto.newBuilder();
//获取数据库json
String content = contentsList.get(i).getDataContent();
//json转protobuf
JsonFormat.merge(content, proto);
//proto中所有字段都有,content有部分字段,先proto需要序列化build,再获取
//proto中有signal,signal下有list
//getAllFields是获取protobuf中字段名称Descriptors.FieldDescriptor和值Object
Map<Descriptors.FieldDescriptor, Object> fs = proto.build().getSignal().getListList().get(j).getAllFields();
二、具体实现
例1
1、protobuf文件:
message InterfaceProto {
required int32 number = 1;
repeated InterfaceInfo list = 2;
message InterfaceInfo{
optional int32 direction = 1 [default=0];
optional int32 crc = 2 [default=0];
optional bytes data = 3 ;//接口数据
optional string version