将 python dict 转换为 protobuf

lea*_*min 5 python dictionary protocol-buffers

如何将以下 dict 转换为 protobuf ?
我必须将 protobuf 作为有效负载发送到 mqtt 代理。我正在使用 python 3.8

publish_msg = {
        "token":"xxxxxxxx",
        "parms":{
            "fPort":8,
            "data":b"MDQzYzAwMDE=",
            "confirmed":False,
            "devEUI":"8CF9572000023509"
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的protobuf定义如下:

syntax = "proto3";
package publish;


message DLParams{
    string DevEUI = 1;
    int32 FPort = 2;
    bytes Data = 3;
    bool Confirm = 4;
}

message DeviceDownlink {
    string Token = 1;
    DLParams Params = 2;
}
Run Code Online (Sandbox Code Playgroud)

tha*_*yne 4

这个怎么样?

import json
from google.protobuf import json_format

# Create an empty message
dl = DeviceDownlink_pb2.DeviceDownlink()

# Get the json string for your dict
json_string = json.dumps(publish_msg)

# Put the json contents into your message
json_format.Parse(json_string, dl)
Run Code Online (Sandbox Code Playgroud)

  • 您可以跳过中间转换为 JSON 字符串并使用 json_format.ParseDict(publish_msg, dl) 。 (4认同)