我怎么知道 protobuf 的 json 的格式应该是什么样的?
How do I know what the json for a protobuff should be formatted like?
我是 protobuf 的新手,我想将一些 protobuf 保存为 json 格式,并且知道 protobuf 的完整格式是什么。我试过只创建一个空的 protobuf 实例,并将其保存到 json,但这只会给我一个空的 json 对象,{}
.
如果我为 属性 填写一个值并将其序列化,我会在 json 中得到 属性,这很好,但我不想必须为我要为其执行此操作的每个 protobuf 的所有属性执行此操作。
有没有办法让我在不为每个字段提供值的情况下查看 protobuf 的完整 json 格式?
笔记
- 我在 Java 中使用 Google 的 protobuf 库,并且可以序列化和反序列化我的对象,我只是不确定如何编写 json特定对象。
- 我查看了 this Whosebug question 以获取信息,但没有找到有用的信息。
是的,JSON formatting for proto3 is documented。
或者,要在不更改默认值的情况下查看示例,您可以在打印时指定 includingDefaultValueFields
:
String json = JsonFormat.printer().includingDefaultValueFields().print(message);
(这至少应该适用于基元;我怀疑如果嵌套消息尚未初始化,它会打印 null
。)
与 所做的并没有什么不同,但为了我的目的,我是这样总结的——你的结果可能会有所不同,哈哈!这允许我从 json 文件加载消息,并反序列化为对 grpc 方法的请求。
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.MessageOrBuilder;
import com.google.protobuf.util.JsonFormat;
/**
* Convert gRPC message to Json string.
*
* @param messageOrBuilder the gRPC message
* @return a Json string
*/
public static String grpcMessageToJson(MessageOrBuilder messageOrBuilder) {
String result = "";
if (messageOrBuilder == null) {
return result;
}
try {
result = JsonFormat.printer().print(messageOrBuilder);
} catch (InvalidProtocolBufferException e) {
LOGGER.warn("Cannot serialize the gRPC message.", e);
}
return result;
}
我是 protobuf 的新手,我想将一些 protobuf 保存为 json 格式,并且知道 protobuf 的完整格式是什么。我试过只创建一个空的 protobuf 实例,并将其保存到 json,但这只会给我一个空的 json 对象,{}
.
如果我为 属性 填写一个值并将其序列化,我会在 json 中得到 属性,这很好,但我不想必须为我要为其执行此操作的每个 protobuf 的所有属性执行此操作。
有没有办法让我在不为每个字段提供值的情况下查看 protobuf 的完整 json 格式?
笔记- 我在 Java 中使用 Google 的 protobuf 库,并且可以序列化和反序列化我的对象,我只是不确定如何编写 json特定对象。
- 我查看了 this Whosebug question 以获取信息,但没有找到有用的信息。
是的,JSON formatting for proto3 is documented。
或者,要在不更改默认值的情况下查看示例,您可以在打印时指定 includingDefaultValueFields
:
String json = JsonFormat.printer().includingDefaultValueFields().print(message);
(这至少应该适用于基元;我怀疑如果嵌套消息尚未初始化,它会打印 null
。)
与
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.MessageOrBuilder;
import com.google.protobuf.util.JsonFormat;
/**
* Convert gRPC message to Json string.
*
* @param messageOrBuilder the gRPC message
* @return a Json string
*/
public static String grpcMessageToJson(MessageOrBuilder messageOrBuilder) {
String result = "";
if (messageOrBuilder == null) {
return result;
}
try {
result = JsonFormat.printer().print(messageOrBuilder);
} catch (InvalidProtocolBufferException e) {
LOGGER.warn("Cannot serialize the gRPC message.", e);
}
return result;
}