gpt4 book ai didi

java - 在 Android 中将 protobuf(由 grpc 生成)转换为 JSON

转载 作者:行者123 更新时间:2023-12-01 23:31:00 26 4
gpt4 key购买 nike

我想将 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,但是因为 grpc 生成的 protobuf 是在 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

不幸的是,该解决方案与早于 Android Oreo 的解决方案不兼容:

https://github.com/protocolbuffers/protobuf/issues/6718

任何更新:

https://groups.google.com/forum/#!topic/protobuf/EC2TtPixCFY

关于java - 在 Android 中将 protobuf(由 grpc 生成)转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58289920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com