在python中探索google protobuf

在python中探索google protobuf,python,protocol-buffers,Python,Protocol Buffers,我从dialogflows API收到一个protobuf。 即使阅读了所有文档,我也不知道如何探索对象和提取值(例如,从中提取字符串) 我告诉你我做了什么: (Pdb) dir(parameter) ['ByteSize', 'Clear', 'ClearExtension', 'ClearField', 'CopyFrom', 'DESCRIPTOR', 'DiscardUnknownFields', 'Extensions', 'FieldsEntry', 'FindInitializat

我从dialogflows API收到一个protobuf。 即使阅读了所有文档,我也不知道如何探索对象和提取值(例如,从中提取字符串)

我告诉你我做了什么:

(Pdb) dir(parameter)
['ByteSize', 'Clear', 'ClearExtension', 'ClearField', 'CopyFrom', 'DESCRIPTOR', 'DiscardUnknownFields', 'Extensions', 'FieldsEntry', 'FindInitializationErrors', 'FromString', 'HasExtension', 'HasField', 'IsInitialized', 'ListFields', 'MergeFrom', 'MergeFromString', 'ParseFromString', 'RegisterExtension', 'SerializePartialToString', 'SerializeToString', 'SetInParent', 'UnknownFields', 'WhichOneof', '_CheckCalledFromGeneratedFile', '_SetListener', '__class__', '__contains__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__unicode__', '_extensions_by_name', '_extensions_by_number', 'fields', 'get_or_create_list', 'get_or_create_struct', 'items', 'keys', 'update', 'values']

(Pdb) parameter.ListFields
<built-in method ListFields of Struct object at 0x7f5e0c17e920>

(Pdb) parameter.ListFields()
[(<google.protobuf.pyext._message.FieldDescriptor object at 0x7f5e0c191a10>, {'endDate': string_value: "2019-07-31T23:59:59+02:00"
, 'startDate': string_value: "2019-07-01T00:00:00+02:00"
})]

(Pdb) parameter.endDate
*** AttributeError: endDate

(Pdb) parameter
fields {
  key: "endDate"
  value {
    string_value: "2019-07-31T23:59:59+02:00"
  }
}
fields {
  key: "startDate"
  value {
    string_value: "2019-07-01T00:00:00+02:00"
  }
}

(Pdb) parameter.fields
{'endDate': string_value: "2019-07-31T23:59:59+02:00"
, 'startDate': string_value: "2019-07-01T00:00:00+02:00"
}

(Pdb) type(parameter.fields)
<class 'google.protobuf.pyext._message.MessageMapContainer'>

(Pdb) parameter.fields.get('endDate')
string_value: "2019-07-31T23:59:59+02:00"
(Pdb)目录(参数)
['ByteSize','Clear','ClearExtension','ClearField','CopyFrom','DESCRIPTOR','DiscardUnknownFields','Extensions','FieldsEntry','FindInitializationErrors','FromString','HasExtension','HasField','IsInitialized','ListFields','MergeFrom','MergeFromString','ParseFromString','RegisterExtension','SerializePartialToStr“目前正在进行的”和“未来的”以及“未来的”,以及“目前正在进行的”和“目前正在进行的“未来生成的文件”,以及“目前的网络侦听器”,以及“未来的类”和“UUUU”的,以及“目前正在进行的项目,”以及“目前正在进行的”,以及“目前的”,以及“目前的”和“目前正在进行的检查称为“未来生成的文件文件”,以及“目前的网络侦听器”,以及“U类类,UUUUUUUUUUUU类的,”以及,“UUUUUUUUUU类类类类类,”,”,”,”以及“UUUUUUUUUUUUUUUUUUUUUUU类类类类类类类类类类类,UUUUUUUUUUUUUUUUUUUUU,”,”,”,”,”,”,”,”以及“UUUUUUUUUUUUUUUUUUUUUUUU"获取状态","置乱","初始化","初始化","子类","迭代",,“我们的工作”是一个月,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月内,一个月,一个月内,一个月内,一个月,一个月内,一个月内,一个月,一个月,“子类钩子”、“unicode”、“扩展名”、“扩展名”、“字段”、“获取或创建列表”、“获取或创建结构”、“项”、“键”,“更新”,“值”]
(Pdb)parameter.ListFields
(Pdb)parameter.ListFields()
[(,{'endDate':字符串_值:“2019-07-31T23:59:59+02:00”
,“开始日期”:字符串_值:“2019-07-01T00:00:00+02:00”
})]
(Pdb)参数.endDate
***AttributeError:endDate
(Pdb)参数
田地{
关键字:“结束日期”
价值观{
字符串值:“2019-07-31T23:59:59+02:00”
}
}
田地{
键:“起始日期”
价值观{
字符串_值:“2019-07-01T00:00:00+02:00”
}
}
(Pdb)参数字段
{'endDate':字符串_值:“2019-07-31T23:59:59+02:00”
,“开始日期”:字符串_值:“2019-07-01T00:00:00+02:00”
}
(Pdb)类型(参数字段)
(Pdb)parameter.fields.get('endDate')
字符串值:“2019-07-31T23:59:59+02:00”
我的目标是提取
startDate
endDate

有谁能帮助解释一下如何系统地解释这样一个未记录的协议,并从中获取值