首页 > 解决方案 > 如何用 Proto 定义表示 JSON 对象变量

问题描述

我想在 gRPC 中定义一个请求消息,它应该有一个 Json 对象作为字段例如

message UserRequest{
    string name = 1;
    string city = 2;
    string email = 3;
    metainfo = 4;//A Json Object variable which can have any number of elements
}

如何在 proto 定义中表示 metainfo 属性?我试过使用下面的定义,但没有用。

message UserRequest{
    string name = 1;
    string city = 2;
    string email = 3;
    google.protobuf.Any metainfo = 4;
}

标签: javaprotocol-buffersgrpcgrpc-javaproto

解决方案


我认为你想要一个.google.protobuf.Struct, via struct.proto - 这本质上封装了一个map<string, Value> fields, 并且大致类似于你想通过 JSON 描述的内容。此外,Struct具有自定义 JSON 处理,如文件中所述:

JSON 表示Struct是 JSON 对象。

所以:

    .google.protobuf.Struct metainfo = 4;

推荐阅读