【问题标题】:Get list of proto messages获取原始消息列表
【发布时间】:2021-10-14 01:47:54
【问题描述】:

我是 protobufs 的新手,我似乎无法理解它。 我有一个这样的 proto 文件。

message Address{
       string Home=1;
       State state=2;
       string Name=3;
enum State{
      STATE_UNKNOWN=0;
      STATE_ARCHIVED=1;
}
}

我已将数据添加到如下所示的消息中。

Address{
Home:"Cornfield";
State: STATE_UNKNOWN;
Name:"Corner";
}
Address{
Home:"Ham";
State: STATE_UNKNOWN;
Name:"Hammer";
}

数据 = 地址.getfielddescriptor() 字段描述符方法无法返回值列表,例如 data=['麦田','火腿']

我该怎么做?

【问题讨论】:

    标签: protocol-buffers proto protobuf-python


    【解决方案1】:

    为了能够使用列表,您需要将字段定义为重复。所以你需要在某个地方定义一个地址簿之类的东西,你可以在其中存储所有地址:

    message Address {
      string home = 1;
      State state = 2;
      string name = 3;
     
      enum State {
        STATE_UNKNOWN  = 0;
        STATE_ARCHIVED = 1;
      }
    }
    
    // Your address book message
    message AddressBook {
      repeated addresses= 1;
    }
    

    接下来在 python 中你使用如下:

    address_book = AddressBook()
    addr = address_book.addresses.add() 
    addr.home = "Cornfield"
    addr.state = STATE_UNKNOWN
    addr.name = "Corner"
    
    # You can also first create an address object and extend the list
    addr2 = Address()
    addr2.home = "Ham"
    addr2.state = STATE_UNKNOWN
    addr2.name = "Hammer"
    address_book.addresses.extend(addr2)
    
    # You can use the list of addresses like any other list:
    # By index: address_book.addresses[0]
    # or in a list: for addr in address_book.addresses:
    

    其他扩展通讯录的方法可以参考protobuf文档here

    【讨论】:

    • 谢谢。是否必须扩展才能获取列表?
    • @hiuoi 从我的脑海中可能不会。
    猜你喜欢
    • 1970-01-01
    • 2014-09-17
    • 2018-07-09
    • 1970-01-01
    • 2021-10-31
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多