JSON字符串与protobuf互转

这篇博客探讨了如何将JSON字符串转换为protobuf,并在转换后检查protobuf中字段是否被赋值。提供了两种方法,特别指出在字段众多的情况下,使用公共方法更为便捷。文章通过实例详细介绍了转换过程,包括protobuf文件定义、实体类创建、序列化和反序列化步骤,以及数据的16进制表示和ByteString操作。
摘要由CSDN通过智能技术生成

一、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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值