如何在Python中解析gRPC响应的数据?

问题描述 投票:0回答:2

我有一个以下格式的 gRPC 响应:

label {
  label {
    key: "blablafhidsahfoia"
  }
}
label {
  label {
    key: "asfhdkj"
    weight: 0.15829162299633026
  }
  label {
    key: "afdfafa"
    weight: 0.1708715856075287
  }
  label {
    key: "asdffd4e"
    weight: 0.13820932805538177
  }
  label {
    key: "afdffd"
    weight: 0.13021881878376007
  }
  label {
    key: "asdffd"
    weight: 0.08352510631084442
  }
  label {
    key: "dffdfdf"
    weight: 0.08115953952074051
  }
  label {
    key: "dffd"
    weight: 0.11294848471879959
  }
  label {
    key: "afdsdf"
    weight: 0.0846037045121193
  }
  label {
    key: "fasfer"
    weight: 0.040171828120946884
  }
}
label {
  label {
    key: "9fdsklj89fksd"
    weight: 1.0
  }
}
label {
  label {
    key: "random4rfsfd"
    weight: 1.0
  }
}
label {
  label {
    key: "jfkljf;sd"
  }
}

我需要从每个外部标签中提取重量最大的内部标签,或者如果没有重量,则提取唯一的标签。 响应本身是不可迭代的,我无法将其转换为列表或字典。 我发现响应有一个函数

ListField()
,结果是一个列表,但只有一个元素,这是一个像这样的元组:

response.ListFields()[0]
(<google.protobuf.pyext._message.FieldDescriptor object at 0x7ff786a76520>, [label {
  key: "blablafhidsahfoia"
}
, label {
  key: "asfhdkj"
  weight: 0.15829162299633026
}
label {
  key: "afdfafa"
  weight: 0.1708715856075287
}
label {
  key: "asdffd4e"
  weight: 0.13820932805538177
}
label {
  key: "afdffd"
  weight: 0.13021881878376007
}
label {
  key: "asdffd"
  weight: 0.08352510631084442
}
label {
  key: "dffdfdf"
  weight: 0.08115953952074051
}
label {
  key: "dffd"
  weight: 0.11294848471879959
}
label {
  key: "afdsdf"
  weight: 0.0846037045121193
}
label {
  key: "fasfer"
  weight: 0.040171828120946884
}
, label {
  key: "9fdsklj89fksd"
  weight: 1.0
}
, label {
  key: "random4rfsfd"
  weight: 1.0
}
, label {
  key: "jfkljf;sd"
}
])

所以我可以将此元组中的第二个元素转换为字符串(其中包含所有数据)并进行一些字符串处理来获取值,是否有更好的方法来执行此操作?


更新:

响应类型是:类'stat_test_pb2.StatResponse'

python grpc proto
2个回答
1
投票

也许 convetion jo json 对你有好处?

from google.protobuf.json_format import MessageToJson 
import json

json.loads(MessageToJson(response))

0
投票
from google.protobuf.json_format import MessageToDict
MessageToDict(response)

会好很多!

© www.soinside.com 2019 - 2024. All rights reserved.