当前位置: 首页 > 知识库问答 >
问题:

在Android中将协议(由grpc生成)转换为JSON

齐冥夜
2023-03-14

我想将一个协议(由grpc生成)转换为JSON。

我知道protobuf可以使用:JSonFormat(https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/util/JsonFormat)但这并没有包含在Android系统中的protobuf-liteimplementation'com.google.protobuf:protobuf-lite:3.0.0')中,它是Android系统中使用的protobuf-gradle插件(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 )

有什么想法吗?

谢谢

共有1个答案

甄伟兆
2023-03-14

好吧,我想我成功了,这就是我得到的解决方案,只要有人像我一样得到stack:

// 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-依赖关系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/#!主题/协议/EC2TtPixCFY

 类似资料:
  • 正如问题所说,我从源代码编译了grpc,也做了,但是,grpc_python_plugin的

  • 我是协议缓冲区和gRPC的新手。现在我正在尝试在Go中使用grpcgrpc-网关构建客户端/服务器架构。 我试着效仿一些例子,但最终总是遇到同样的问题。用protoc生成代码后,我运行go build,得到了这个错误: 这是go.mod: 这是: 这是指向存储库的链接:https://github.com/riccardopedrielli/grpc-gateway-test 我看到生成的go文件

  • 是否有一个工具或库可以将PROBUFF对象映射到POJO。我想让pojo实现我无法使用PROBUFF对象实现的其他接口。或者我必须手动执行此转换?

  • 问题内容: 我有以下代码。如何解决最后一行中的错误? 问题答案: 更新: 此问题已在Swift 1.2+(Xcode 6.3+)中修复。Xcode 6.3 beta发行说明说: 现在,只要没有关联类型,动态类型转换(“ as!”,“ as?”和“ is”)就可以使用Swift协议类型。 只能检查协议一致性(其包括,,和用) 协议。不是。 请参阅Swift书中的“ 检查协议一致性”部分。 注意 仅当

  • 本文档作为 gRPC 在 HTTP2 草案17框架上的实现的详细描述,假设你已经熟悉 HTTP2 的规范。产品规则采用的是ABNF 语法 大纲 以下是 gRPC 请求和应答消息流中一般的消息顺序: 请求 → 请求报头 *有定界符的消息 EOS 应答 → 应答报头 *有定界符的消息 EOS 应答 → (应答报头 *有定界符的消息 跟踪信息) / 仅仅跟踪时 请求 请求 → 请求报头 *界定的消息 E

  • 我正在android工作室中创建一个android应用程序(2.3.3)。我将要实现SAP HANA SQL数据库查询并显示图表。我创建了应用程序,试图包含ngdbc。jar文件有几种方式(1.添加为jar模块,2.添加为库(复制到libs文件夹中),3.项目结构,依赖项,添加了这个jar文件。),然而,我无法让它工作。我已导入java.sql.*;(可能很好,因为它不是红色或灰色) 在Class