Asset类型的对象不可进行JSON序列化



我正在使用GCP的Python客户端API来列出云资产。我需要将输出移动到CSV文件中。但我不能,因为它显示

TypeError:Asset类型的对象不是JSON可序列化的

我的代码

response = client.list_assets(
request={
"parent": project_resource,
"read_time": None,
"asset_types": ["compute.googleapis.com/Instance"],
"content_type": asset_v1.ContentType.RESOURCE,
"page_size": 50,
}
)
for asset in response:
print(asset)
df = json_normalize(asset)
df.to_csv('list.csv', sep=',', encoding='utf-8')`

我的输出

TypeError: Object of type Asset is not JSON serializable

我需要使用任何其他库文件来转换为CSV吗?

我怀疑Asset是一个协议缓冲区消息,并且(这些类(不可JSON序列化。

注意确认Asset是协议缓冲区。该方法使用gRPC代码转换,请参阅assets.list

您应该(!(能够使用google.protobuf.json_format中的MessageToJSON将protobuf消息转换为json,然后可以将其转换为CSV。该模块还包括MessageToDict,在这种情况下可能(!?(更可取

更新

显然(!(谷歌已经改变了对API客户端库的Protobuf支持,并将Proto Plus用于Python。直到你的问题我才知道。现在的解决方案是(!(:

for asset in resp:
j = asset_v1.Asset.to_json(asset)

而且,IIUC,因为您需要to_json协议缓冲区消息,所以您需要迭代respto_json每个(!?(asset,然后在转换为CSV之前重新组装它们。

注意当我怀疑您真的想序列化响应的assets属性(Asset列表(时,您的代码会出现(!?(,将响应中的每个Asset创建为一个单独的CSV文件(list.csv(。

相关内容

  • 没有找到相关文章

最新更新