Java 如何从Json转换为Protobuf?
我对使用protobuf还不熟悉,想知道是否有一种简单的方法可以在Java中将json流/字符串转换为protobuf流/字符串 比如说,Java 如何从Json转换为Protobuf?,java,json,protocol-buffers,Java,Json,Protocol Buffers,我对使用protobuf还不熟悉,想知道是否有一种简单的方法可以在Java中将json流/字符串转换为protobuf流/字符串 比如说, protoString = convertToProto(jsonString) 我有一个json字符串,我想将其解析为protobuf消息。因此,我想首先将json字符串转换为protobuf,然后对其调用Message.parseFrom() 提前感谢您的帮助 使用proto3,您可以使用。它直接从JSON表示进行解析,因此不需要单独调用MyMessa
protoString = convertToProto(jsonString)
我有一个json字符串,我想将其解析为protobuf消息。因此,我想首先将json字符串转换为protobuf,然后对其调用Message.parseFrom()
提前感谢您的帮助 使用proto3,您可以使用。它直接从JSON表示进行解析,因此不需要单独调用
MyMessage.parseFrom(…)
。像这样的方法应该会奏效:
JsonFormat.parser().merge(json_string, builder);
网上服务:
此工具可立即将JSON转换为Protobuf。在左侧粘贴JSON结构,将在右侧生成等价的Protobuf,您可以将其粘贴到程序中。脚本必须做出一些假设,所以请仔细检查输出
您可能想看一看“是将json流/字符串转换为protobuf流/字符串的简单方法吗?”可能不是。他们的工作方式不同;protobuf字段实际上没有在序列化表示中命名,但它们是在一个序列中。JSON几乎是相反的;字段已命名,但顺序通常并不重要。您可以使用生成的protobuf类,并使用Jackson mixins对它们进行注释和解析。如果某个值无效(例如proto为布尔值,但json值为整数),是否有方法将解析器配置为忽略该字段或将该字段设置为null,没有抛出
com.google.protobuf.InvalidProtocolBufferException
?这似乎对我的班级不起作用-我得到com.google.protobuf.InvalidProtocolBufferException:JsonObject
-有什么建议吗?虽然这段代码可以回答问题,提供有关此代码为什么和/或如何回答此问题的附加上下文可以提高其长期价值。这将从示例输入创建.proto模式。听起来OP想要的是有效载荷,而不是模式
//You can use this for converting your input json to a Struct / any other Protobuf Class
import com.google.protobuf.Struct.Builder;
import com.google.protobuf.Struct;
import com.google.protobuf.util.JsonFormat;
import org.json.JSONObject;
JSONObject parameters = new JSONObject();
Builder structBuilder = Struct.newBuilder();
JsonFormat.parser().merge(parameters.toString(), structBuilder);
// Now use the structBuilder to pass below (I used it for Dialog Flow V2 Context Management)