我正在使用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?
1条答案
按热度按时间beq87vna1#
我怀疑
Asset
是一个协议缓冲区消息,并且(这些类)不是JSON可序列化的。Asset
是协议缓冲区。该方法使用gRPC代码转换,请参见assets.list
您应该(!)能够在google.protobuf.json_format中使用
MessageToJSON
将protobuf消息转换为JSON,然后再转换为CSV。该模块还包括MessageToDict
,在这种情况下可能(!?)更可取。更新
显然(!)谷歌已经改变了API客户端库的Protobuf支持,并使用Proto Plus for Python。直到你的问题,我才知道这一点。解决方案是现在(!):
而且,IIUC,因为您需要
to_json
协议缓冲区消息,所以您将需要在resp
、to_json
和每个(!?)asset
上迭代,然后在转换为CSV之前重新组装它们。Asset
创建为单独的CSV文件(list.csv
),而我怀疑您确实希望序列化响应的assets
属性(Asset
列表)。