如何在 python 中设置 protobuf 字段或属性
How to set protobuf fields or attributes in python
我有 protobuf 编译文件,我有 json 数据,我想从 protobuf complied class 访问字段并设置 json objet[=14= 的值]
这是我编译的代码,由于编译代码很大,我刚刚添加了描述符部分
_STATUSMSG = _descriptor.Descriptor(
name='StatusMsg',
full_name='RBAT.PRS.StatusMsg',
filename=None,
file=DESCRIPTOR,
containing_type=None,
create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='RBAT.PRS.StatusMsg.id', index=0,
number=1, type=13, cpp_type=3, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='tag', full_name='RBAT.PRS.StatusMsg.tag', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='type_type', full_name='RBAT.PRS.StatusMsg.type_type', index=2,
number=3, type=14, cpp_type=8, label=2,
has_default_value=False, default_value=1,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='control_mode', full_name='RBAT.PRS.StatusMsg.control_mode', index=3,
number=4, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='interface_status', full_name='RBAT.PRS.StatusMsg.interface_status', index=4,
number=5, type=14, cpp_type=8, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='config_type', full_name='RBAT.PRS.StatusMsg.config_type', index=5,
number=6, type=14, cpp_type=8, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='software_version', full_name='RBAT.PRS.StatusMsg.software_version', index=6,
number=7, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
],
来自sample.py
import from protos.status_msg_pb2 import StatusMsg
class Sample():
def decode(self, json):
v_status = StatusMsg()
v_status["id"] = json["payload"]["id"]
print(v_status.ByteSize())
我收到错误
*'module' object is not subscriptable* *emphasized text*
也许试试 v_status.id = json["payload"]["id"]
?
了解 id
字段的类型(int32
、int64
、string
等)会很有帮助。
我认为下标(即 ["id"]
)仅适用于 struct
的字段。
这可能会有帮助:https://developers.google.com/protocol-buffers/docs/reference/python-generated#fields
我有 protobuf 编译文件,我有 json 数据,我想从 protobuf complied class 访问字段并设置 json objet[=14= 的值]
这是我编译的代码,由于编译代码很大,我刚刚添加了描述符部分
_STATUSMSG = _descriptor.Descriptor(
name='StatusMsg',
full_name='RBAT.PRS.StatusMsg',
filename=None,
file=DESCRIPTOR,
containing_type=None,
create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='RBAT.PRS.StatusMsg.id', index=0,
number=1, type=13, cpp_type=3, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='tag', full_name='RBAT.PRS.StatusMsg.tag', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='type_type', full_name='RBAT.PRS.StatusMsg.type_type', index=2,
number=3, type=14, cpp_type=8, label=2,
has_default_value=False, default_value=1,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='control_mode', full_name='RBAT.PRS.StatusMsg.control_mode', index=3,
number=4, type=11, cpp_type=10, label=2,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='interface_status', full_name='RBAT.PRS.StatusMsg.interface_status', index=4,
number=5, type=14, cpp_type=8, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='config_type', full_name='RBAT.PRS.StatusMsg.config_type', index=5,
number=6, type=14, cpp_type=8, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
_descriptor.FieldDescriptor(
name='software_version', full_name='RBAT.PRS.StatusMsg.software_version', index=6,
number=7, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
],
来自sample.py
import from protos.status_msg_pb2 import StatusMsg
class Sample():
def decode(self, json):
v_status = StatusMsg()
v_status["id"] = json["payload"]["id"]
print(v_status.ByteSize())
我收到错误
*'module' object is not subscriptable* *emphasized text*
也许试试 v_status.id = json["payload"]["id"]
?
了解 id
字段的类型(int32
、int64
、string
等)会很有帮助。
我认为下标(即 ["id"]
)仅适用于 struct
的字段。
这可能会有帮助:https://developers.google.com/protocol-buffers/docs/reference/python-generated#fields