【问题标题】:Protobuf oneof JSON syntax issueProtobuf oneof JSON 语法问题
【发布时间】:2021-08-26 02:23:14
【问题描述】:

我有一个类似的原型(不是确切的情况,但非常相似)

message football {
    repeated TeamDetails teamInfo= 1;
}

message TeamDetails {
    string position = 1;
    map<string, points> params = 2;
}

message points {
    oneof value {
         string string_value = 1;
         double number_value = 2;
         int32 int_value = 3;
    }
}

对此我有几个问题;

  • 我这里的一个还可以用吗?

  • 在尝试将以下 JSON 运行到终点时,我一直遇到问题,我不确定我做错了什么

     "teamInfo": [
        {
            "position":"7th",
            "params": {"Manchester United": 51}
         }
      ]
    

给我

"Error getting request data: bad input: expecting start of JSON object: '{' ; instead got 51"

即使在 51 周围添加引号后,我也会遇到相同的错误,如果我用 替换 proto 中的“点”,它将成功地适用于相同的 JSON(但我不想要一个字符串每次,因此我尝试使用 oneof 但我遇到了这个问题)

【问题讨论】:

  • 您使用什么编程语言将 json 字符串转换为 protobuf 对象?

标签: protocol-buffers proto


【解决方案1】:

请尝试:

 "teamInfo": [
    {
        "position":"7th",
        "params": {"Manchester United": { "int_value": 51 } }
     }
  ]

params 的类型是 map&lt;string, points&gt;,但您的 JSON 具有 map&lt;string, int32&gt; 的等价物。这是有效的 JSON,但不是原型类型的等价物。

因为pointsoneofstring(或)double(或)int32,我认为您需要将(任何)oneof 替换为可以表示多个(可能的)类型,即{...},在这种情况下,您需要名为int_valueint32字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多