如何在proto3中定义嵌套切片?修正Proto定义以生成二维数组
修改Proto3定义以生成二维数组JSON结构
要让idc_paths生成二维字符串数组的JSON结构,你需要调整Proto定义,避免嵌套消息导致生成对象数组。具体方案如下:
解决方案:使用Well-Known Type ListValue
Proto3的Well-Known Type中的google.protobuf.ListValue在JSON序列化时会直接转为数组,正好匹配你的需求。修改后的Proto定义如下:
import "google/protobuf/struct.proto"; message CreateSRPolicyDataRequest { repeated google.protobuf.ListValue idc_paths = 1; }
生成的JSON结构将变为:
"idc_paths": [ [ "" ] ]
原定义问题说明
你原来的定义中,idc_paths是Path消息的数组,而Path消息包含repeated string path字段,JSON序列化时会将每个Path实例转为带path键的对象,最终得到对象数组结构。而ListValue作为专门的列表类型,JSON序列化规则会直接将其解析为数组,无需额外对象包装。
另外你提到的[packed=true]确实对string类型无效,该选项仅影响二进制序列化的存储方式,与JSON结构无关。
内容的提问来源于stack exchange,提问作者SimpleMiant
相关产品推荐
相关产品推荐

