Я хотел бы преобразовать protobuf (созданный grpc) в JSON.
Я знаю, что с protobuf вы можете использовать: JSonFormat (https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/util/JsonFormat), но это не включено в protobuf-lite (implementation 'com.google.protobuf:protobuf-lite:3.0.0'), который используется в Android с protobuf-gradle-plugin (https://github.com/google/protobuf-gradle-plugin/issues/276)
JSonFormat
protobuf-lite
implementation 'com.google.protobuf:protobuf-lite:3.0.0'
protobuf-gradle-plugin
Есть ли альтернатива?
Я использую Kotlin,но поскольку protobuf, сгенерированный из grpc, находится в java, я не могу использовать сериализацию из Kotlin (https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/runtime_usage.md#protobuf)
Есть идеи?
Спасибо
Хорошо, я думаю, у меня все получилось, вот решение, которое я получил, просто если кто-то получит стек, как я:
// GRPC implementation "io.grpc:grpc-okhttp:${grpcVersion}" // CURRENT_GRPC_VERSION implementation "io.grpc:grpc-stub:${grpcVersion}" // CURRENT_GRPC_VERSION implementation "io.grpc:grpc-protobuf:$grpcVersion" // Protobuf implementation "com.google.protobuf:protobuf-java:$protobufVersion" implementation "com.google.protobuf:protobuf-java-util:$protobufVersion" protobuf { protoc { artifact = "com.google.protobuf:protoc:$protobufVersion" } plugins { grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" // CURRENT_GRPC_VERSION } } generateProtoTasks { all().each { task -> task.builtins { java { } } task.plugins { grpc { } } } } }
Теперь я могу использовать JsonFormat:
val jsonPrinter = JsonFormat.printer().includingDefaultValueFields() return jsonPrinter.print(myProtobufObject)
источники:
https://github.com/google/protobuf-gradle-plugin#protos-in-dependencies https://github.com/grpc/grpc-java https://github.com/protocolbuffers/protobuf/tree/master/java
https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/util/JsonFormat
К сожалению, это решение не совместимо с решениями старше AndroidOreo:
https://github.com/protocolbuffers/protobuf/issues/6718
Любые обновления:
https://groups.google.com/forum/#!topic/protobuf/EC2TtPixCFY