来自对公告博客帖子的评论:
关于JSON:JSON的结构类似于协议缓冲区,但协议缓冲区二进制格式仍然更小,编码速度更快.尽管如此,JSON为协议缓冲区提供了一个很好的文本编码 - 编写一个编码器/解码器,使用protobuf反射将任意协议消息转换为JSON和从JSON转换,这是微不足道的.这是与AJAX应用程序通信的好方法,因为用户在访问您的页面时下载完整的protobuf解码器可能太多了.
制作一个映射可能是微不足道的,但两者之间是否有一个"明显"的映射,任何两个独立的开发团队自然会解决这个问题?如果两个产品支持PB数据并且可以互操作,因为它们共享相同的.proto规范,我想知道如果他们独立引入相同规范的JSON反射,他们是否仍然能够互操作.可能会有一些任意的决定,例如,枚举值是由字符串表示的(人类可读的典型JSON)还是整数值?
那么是否存在已建立的映射,以及用于从.proto规范生成JSON编码器/解码器的任何开源实现?
我是新手使用protobuf,并想知道是否有一种简单的方法将json流/字符串转换为Java中的protobuf流/字符串?
例如,
protoString = convertToProto(jsonString)
Run Code Online (Sandbox Code Playgroud)
我有一个json字符串,我想解析为protobuf消息.所以,我想首先将json字符串转换为protobuf,然后调用Message.parseFrom()它.
在此先感谢您的帮助!
我正在调用api来获取输入流,然后调用静态方法parseFrom(inputstream)将其转换为protobuffclass.
如果我使用特定的类来实现它的工作原理:
public CustomerDTOOuterClass.CustomerDTO GetCustomer()
{
CustomerDTOOuterClass.CustomerDTO customer = null;
try
{
URL url = new URL("https://localhost:44302/Api/customer/1?");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/x-protobuf");
conn.connect();
InputStream is = conn.getInputStream();
CustomerDTOOuterClass.CustomerDTO customer =
CustomerDTOOuterClass.CustomerDTO.parseFrom(is);
conn.disconnect();
}
catch(Exception ex)
{
System.out.println("[ "+ex.getMessage()+" ]");
}
return customer;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我将它改为泛型类型它会失败,因为T没有方法parseFrom,我可以在T中实现任何接口,所以我可以调用parseFrom方法吗?
public T GetObject()
{
T object = null;
try
{
URL url = new URL("https://localhost:44302/Api/customer/1?");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/x-protobuf");
conn.connect();
InputStream is = conn.getInputStream();
T object = T.parseFrom(is);
conn.disconnect();
}
catch(Exception …Run Code Online (Sandbox Code Playgroud)