gpt4 book ai didi

java - Protobuf 重复字段到 json 数组映射

转载 作者:行者123 更新时间:2023-12-05 05:59:28 28 4
gpt4 key购买 nike

我使用 Java、Spring-boot、Hibernate 堆栈和 Protocol Buffer 作为微服务之间通信的 DTO。在反向代理中,我使用 protobuf 的 java 支持将 protobuf 对象转换为 json。

我有以下结构

message Item {
int64 id = 1;
string name = 2;
int64 price = 3;
}

message MultipleItems {
repeated Item items = 1;
}

将 MultipleItems DTO 转换为 json 得到以下结果:

{
"items": [
{
"id": 1,
"name": "ABC",
"price": 10
},
{
"id": 2,
"name": "XYZ",
"price": 20
}
]
}

在生成的 json 中,我得到了映射到 json 数组的关键 items

我想删除 key 并只返回 json 数组作为结果。有没有一种干净的方法来实现这一目标?

最佳答案

认为这是不可能的。

repeated 必须作为修饰符出现在字段上,并且必须命名字段。

https://developers.google.com/protocol-buffers/docs/proto3#json

没有明显的理由说明 Protobuf 不支持这个 1 但是,它需要扩展其语法以支持使用 repeated在消息级别而不是当前在字段级别的使用。当然,这也使得 proto 消息下游的一切都变得更加复杂

JSON 当然允许。

它也可能使编码/解码变得复杂(在线消息可以是消息或消息数组。

1 也许担心的是生成的代码 (!) 也必然更复杂?方法都需要检查消息是数组类型还是结构类型,例如:

func (x *X) SomeMethod(ctx context.Context, []*pb.SomeMethodRequest) ...

而且,在 Golang 前泛型中,不可能以这种方式重载方法,它们需要有不同的名称:

func (x *X) SomeMethodArray(ctx context.Context, []*pb.SomeMethodRequest) ...
func (x *X) SomeMethodMessage(ctx context.Context, *pb.SomeMethodRequest) ...

关于java - Protobuf 重复字段到 json 数组映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68150196/

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