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

如何在代码中正确读取JSON格式的谷歌表格服务账号凭据

解决Service Account凭据字符串解析的KeyError问题

嘿,这个问题我之前也碰到过!问题出在你处理JSON字符串的方式上,尤其是私钥的格式被错误修改了,导致oauth2client库无法正确解析凭据,进而抛出_private_key_pkcs8_pem的KeyError。

错误原因分析

你手动执行的replace("'",'"').replace('\r\n', '\\r\\n')操作完全没必要,反而破坏了私钥的格式:

  • 原始JSON本身就是双引号,不需要替换单引号(你的字符串用的是三重单引号,内部的双引号不会冲突)
  • 私钥里的换行是格式要求的,你替换成转义的\\r\\n会让库无法正确识别私钥结构,导致内部无法生成需要的_private_key_pkcs8_pem字段

正确的实现代码

直接保留JSON的原始格式,用Python三重引号包裹字符串,然后正常解析即可:

import json
from oauth2client.service_account import ServiceAccountCredentials
import gspread

# 用三重单引号直接保留JSON的原始结构,注意私钥的换行要完整保留
json_string = '''
{
  "type": "service_account",
  "project_id": "你的项目ID",
  "private_key_id": "你的私钥ID",
  "private_key": "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxxxxxx
(这里是你的完整私钥内容,保留原始换行)
-----END PRIVATE KEY-----",
  "client_email": "你的服务账号邮箱@xxx.iam.gserviceaccount.com",
  "client_id": "你的客户端ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/你的服务账号邮箱%40xxx.iam.gserviceaccount.com"
}
'''

# 直接解析JSON字符串,不需要额外替换操作
info = json.loads(json_string)

# 指定需要的API权限范围(必须包含谷歌表格和驱动器的权限)
scope = [
    "https://spreadsheets.google.com/feeds",
    "https://www.googleapis.com/auth/drive"
]

# 从解析后的字典创建凭据
credentials = ServiceAccountCredentials.from_json_keyfile_dict(info, scope)

# 授权并访问表格
client = gspread.authorize(credentials)
sheet = client.open("Responses").sheet1

# 测试读取数据,验证是否成功
print(sheet.get_all_records())

关键注意事项

  • 私钥格式要完整:确保private_key字段包含完整的-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----,中间的私钥内容保留原始换行(可以直接在三重引号里换行,Python会自动处理)
  • 不要手动修改JSON格式:三重引号可以完美保留JSON的原始结构,不需要做任何引号或换行的替换
  • 导入必要模块:别忘了导入json模块,否则json.loads会报错
  • 权限范围要正确:必须包含谷歌表格和驱动器的权限,否则无法访问目标表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:06:34