如何转换Json至Protobuf?

Kar*_*wal 23 java json protocol-buffers

我是新手使用protobuf,并想知道是否有一种简单的方法将json流/字符串转换为Java中的protobuf流/字符串?

例如,

protoString = convertToProto(jsonString)
Run Code Online (Sandbox Code Playgroud)

我有一个json字符串,我想解析为protobuf消息.所以,我想首先将json字符串转换为protobuf,然后调用Message.parseFrom()它.

在此先感谢您的帮助!

小智 21

使用proto3,您可以使用JsonFormat执行此操作.它直接从JSON表示解析,因此不需要单独调用MyMessage.parseFrom(...).这样的事情应该有效:

JsonFormat.parser().merge(json_string, builder);
Run Code Online (Sandbox Code Playgroud)

  • 当一个值无效时(比如proto是boolean,但是json值是整数),有没有办法配置解析器忽略该字段或将该字段设置为null,而不是抛出`com.google.protobuf.InvalidProtocolBufferException`? (5认同)

小智 10

//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)
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的附加上下文可以提高其长期价值。 (6认同)