Конвертируйте protobuf (созданный grpc) в JSON в Android - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы преобразовать 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)

Есть ли альтернатива?

Я использую Kotlin,но поскольку protobuf, сгенерированный из grpc, находится в java, я не могу использовать сериализацию из Kotlin (https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/runtime_usage.md#protobuf)

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 10 октября 2019

Хорошо, я думаю, у меня все получилось, вот решение, которое я получил, просто если кто-то получит стек, как я:

// 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...