【问题标题】:Writing a proto file for a JSON input containing random field names为包含随机字段名称的 JSON 输入编写 proto 文件
【发布时间】:2018-08-16 09:19:00
【问题描述】:

这里是 protobuff 的新手。我正在使用 protobuff 压缩 JSON 文件。问题是这个 JSON 文件来自网络服务器的响应,并且包含某些名称是随机的字段,即每个请求发布到服务器时,键名都不同。例如考虑下面的 JSON:

{
  "field1": [
       {
           "abc": "vala",
           "def": "valb",
           "ghi": "valc"
       }
   ],
  "field2": "val2",
  "field3": "val3"
}

在上面的json中,字段名称“abc”、“def”、“ghi”每次都可以变化。 protobuf 中有没有办法让我完全获得 field1 的值(如单个字符串或其他任何内容)而不会丢失其中的随机字段?

【问题讨论】:

    标签: json protocol-buffers protobuf-java


    【解决方案1】:

    我认为你想要“struct.proto”,即

    syntax = "proto3";
    import "google/protobuf/struct.proto";
    message Foo {
         .google.protobuf.Struct field1 = 1;
         string field2 = 2;
         string field3 = 3;
    }
    

    或者可能(因为数组):

    syntax = "proto3";
    import "google/protobuf/struct.proto";
    message Foo {
         repeated .google.protobuf.Struct field1 = 1;
         string field2 = 2;
         string field3 = 3;
    }
    

    不过,我要强调的是,protobuf 并不适合解析 任意 json;为此,您应该使用 json 库,而不是 protobuf 库。

    【讨论】:

    • 嘿,感谢您的回复...但这对我不起作用。 struct 内部不使用需要它们“键”和“值”字段存在的映射吗?我正在寻找一种方法来在 proto2 或 proto3 的序列化中保留未知字段。你能告诉我一些关于它的事情吗?这可能会有很大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2020-12-05
    相关资源
    最近更新 更多