【问题标题】:What's the proper way to extract data from a google protobuff object?从 google protobuf 对象中提取数据的正确方法是什么?
【发布时间】:2018-06-08 19:53:29
【问题描述】:

到目前为止,我从未遇到过这种集合或对象(它是对 Google-Cloud-Vision API 的请求的响应)。

我编写了一个使用 API 并正确执行我想要的操作的类。但是,我可以在响应中提取/操作数据的唯一方法是使用此模块:

from google.protobuf.json_format import MessageToJson 

我基本上将 protobuff 序列化为一个字符串,然后使用正则表达式来获取我想要的数据。

一定有比这更好的方法。有什么建议么?我希望 API 响应给我一个 json dict 或 json dict 的 dicts 等...不过我能想到的只是将响应变成一个字符串。

这是来自 github 存储库的文件: image_analyzer.py

提前谢谢大家。

【问题讨论】:

    标签: json python-3.x python-requests protocol-buffers google-cloud-vision


    【解决方案1】:

    内置的json 模块会将字符串解析成字典,例如json.loads(MessageToJson(response1))

    【讨论】:

    • 好的,但我必须先将 protobuff 序列化为字符串。谢谢
    【解决方案2】:

    您可以直接访问消息对象中的字段,例如:

    response1 = vision_client.face_detection(image=image)
    print(response1)
    print(response1.face_annotations[0].detection_confidence)
    

    【讨论】:

    • 不幸的是,一个不起作用。这就是我必须首先序列化响应的原因:如果您想做的不仅仅是打印对象,则会导致此错误:x = response1.detectionConfidence AttributeError: 'AnnotateImageResponse' object has no attribute 'detectionConfidence'
    • @JamesColley 我可能弄错了属性名称,尝试根据 github.com/googleapis/googleapis/blob/master/google/cloud/… 进行修复。但是,打印对象时应该可以看到正确的属性名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多