Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Json转换为Protobuf?_Java_Json_Protocol Buffers - Fatal编程技术网

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

我对使用protobuf还不熟悉,想知道是否有一种简单的方法可以在Java中将json流/字符串转换为protobuf流/字符串

比如说,

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)