message Example {
enum State {
Deleted = 1;
Inactive = 2;
Active = 4;
}
optional uint64 id = 1 [(gson_name) = "id"];
optional uint64 state = 2 [(gson_name) = "state"];
optional uint64 userId = 3 [(gson_name) = "uui"];
optional sint32 marketId = 4 [(gson_name) = "m"];
optional uint64 productId = 5 [(gson_name) = "p"];
}
Json String
v: String = {"m": 97, "state": 1, "uui": 1, "id": 1, "p": 1}
使用失败的json调用转换。
gson.fromJson(v, classOf[Example])
异常 显示java.lang.NullPointerException
我不确定这是否是将json转换为生成的proto类的正确方法。有人可以告诉我我做错了什么,或者建议其他一些方法来实现这一点。我在protobuf版本2.6上,并不能真正移动到这个项目的3。
答案 0 :(得分:0)
我假设你有为Message对象生成的Java类。如果您在OP中为Proto Message生成了Java类,则可以使用以下代码。
以下代码将PROTO消息写入文件。如果您不需要,可以发表评论。
将JSON转换为protobuf消息对象并写入文件的代码: -
public static void main(String[] args) throws IOException {
String jsonString = "{\"m\": 97, \"state\": 1, \"uui\": 1, \"id\": 1, \"p\": 1}";
Gson gson = new GsonBuilder().create();
JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
ExampleProto.Example.Builder example = ExampleProto.Example.newBuilder();
example.setId(jsonObject.get("id").getAsLong());
example.setMarketId(jsonObject.get("m").getAsInt());
example.setProductId(jsonObject.get("p").getAsInt());
example.setState(jsonObject.get("state").getAsInt());
example.setUserId(jsonObject.get("uui").getAsInt());
System.out.println(example.build());
FileOutputStream output = new FileOutputStream(new File("proto.txt"));
example.build().writeTo(output);
output.close();
}