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

使用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

额外说明

  1. json.dumps()的作用:将Python字典序列化为符合JSON规范的字符串(使用双引号、正确的结构),后续读取时可以正常用json.loads()解析,而str(json_data)生成的字符串无法被正确识别为JSON。
  2. 优化可读性:如果需要写入的JSON文件更易读,可以给json.dumps()添加缩进参数:json.dumps(json_data, indent=2)。
  3. 上下文管理器:with blob.open("w") as f会在代码块结束后自动关闭文件,手动调用f.close()完全冗余,建议删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:09