You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何序列化Google Cloud ComputeRoutesResponse Protobuf响应?

解决Google Cloud Routes官方Python库Protobuf响应JSON序列化问题

当使用requests直接调用Google Cloud Routes API的Web端点时,能直接获取JSON格式响应;但使用官方Python客户端库调用时,返回的是ComputeRoutesResponse类型的Protobuf对象,直接尝试用json.dumps()序列化会触发如下错误:

TypeError: Object of type ComputeRoutesResponse is not JSON serializable

解决方案

Protobuf对象本身提供了成熟的JSON转换方式,无需手动处理序列化逻辑,以下是两种可靠方法:

方法1:使用Protobuf对象内置的to_json()方法

新版本的Google Cloud Protobuf库为响应对象提供了直接转JSON的方法,代码示例:

# 假设route_response是官方库返回的ComputeRoutesResponse实例
json_response = route_response.to_json()

# 保存到本地文件
with open("route_result.json", "w", encoding="utf-8") as f:
    f.write(json_response)

# 后续处理时加载JSON
import json
processed_data = json.loads(json_response)

方法2:使用google.protobuf.json_format工具模块

如果你的Protobuf版本不支持to_json()方法,可以使用官方提供的格式化工具转换:

from google.protobuf.json_format import MessageToJson

# 将Protobuf对象转换为JSON字符串
json_response = MessageToJson(
    route_response,
    preserving_proto_field_name=True  # 可选:保留Protobuf原始下划线字段名,默认转为驼峰式
)

# 保存或处理JSON内容
with open("route_result.json", "w", encoding="utf-8") as f:
    f.write(json_response)

关键说明

  • 官方Python客户端默认使用gRPC协议与服务端通信,Protobuf是gRPC的标准序列化格式,因此添加content-type: application/json元数据无法改变通信协议,也就无法直接获取JSON响应,必须在客户端完成Protobuf到JSON的转换。
  • 转换后的JSON内容会严格遵循你设置的x-goog-fieldmask规则,与Web API返回的结构保持一致。

内容的提问来源于stack exchange,提问作者Guanaco Devs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:32:18