使用Cloud Functions修改GCS中JSON文件遇TypeError问题求助
解决Google Cloud Functions修改GCS JSON文件时的TypeError问题
你遇到的TypeError: write() argument must be str, not dict错误,核心原因是你用了错误的方式将Python字典转为可写入的字符串:str(json_data)生成的是字典的Python字符串表示(比如{'stuID': 's001', ...}),既不符合JSON规范,也不是正确的序列化方式。
修复方案
替换写入逻辑中的str(json_data)为json.dumps(json_data),用JSON官方序列化方法生成标准JSON字符串。同时可以去掉冗余的手动关闭文件操作(with上下文会自动处理)。
修改后的完整代码
import json from google.cloud import storage def hello_gcs(event, context): my_file = event['name'] bucket_name = event['bucket'] json_data = modify_json(bucket_name, my_file) def modify_json(bucket_name, my_file): storage_client = storage.Client() bucket = storage_client.get_bucket(bucket_name) blob = bucket.blob(my_file) content = blob.download_as_text() json_data = json.loads(content) # 修改JSON数据 json_data['stuID'] = 's001' # 写回GCS with blob.open("w") as f: # 用json.dumps生成标准JSON字符串 f.write(json.dumps(json_data)) return json_data
额外说明
json.dumps()的作用:将Python字典序列化为符合JSON规范的字符串(使用双引号、正确的结构),后续读取时可以正常用json.loads()解析,而str(json_data)生成的字符串无法被正确识别为JSON。- 优化可读性:如果需要写入的JSON文件更易读,可以给
json.dumps()添加缩进参数:json.dumps(json_data, indent=2)。 - 上下文管理器:
with blob.open("w") as f会在代码块结束后自动关闭文件,手动调用f.close()完全冗余,建议删除。
内容的提问来源于stack exchange,提问作者RSG
相关产品推荐
相关产品推荐

