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

调用IBM Cloud Function获取Cloudant数据返回空对象问题

问题排查与修复

核心问题分析

报错Expecting value: line 1 column 1 (char 0)说明客户端解析Cloud Function返回的响应时,拿到的内容不是有效的JSON(甚至是空内容)。结合代码来看,主要有两个问题:

1. Cloud Function返回不可序列化数据

原Cloud Function中直接将Cloudant的Document对象添加到列表返回,这类对象包含大量Cloudant内部属性,无法被正确序列化为标准JSON,导致返回的响应内容无效。

2. 客户端请求函数错误处理不完善

get_request函数的异常捕获逻辑过于宽泛,且未处理JSON解析失败的场景,也没有校验响应状态码,无法及时定位问题。


修复步骤

修复Cloud Function代码

修改文档收集逻辑,提取Document对象中的实际数据(存储在_data属性中),确保返回可序列化的JSON:

import json
from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result, ResultByKey
 
def main(args):
    # Connect to the database
    client = Cloudant.iam(
        account_name='account_name',
        api_key='api_key',
        connect=True
    )
    db = client['dealerships']
 
    # Query all documents from the database
    documents = []
    for doc in db:
        # 提取文档的实际业务数据,避免序列化内部对象
        documents.append(doc._data)
 
    # Disconnect from the database
    client.disconnect()
 
    # Return the list of documents as JSON
    return {"entries": documents}

修复客户端get_request函数

增强错误处理,校验响应状态码,使用更可靠的JSON解析方式,并打印调试信息:

import requests
import json

def get_request(url, **kwargs):
    print(kwargs)
    print("GET from {} ".format(url))
    try:
        response = requests.get(
            url, headers={'Content-Type': 'application/json'}, params=kwargs)
        # 自动校验状态码,非200系列直接抛出异常
        response.raise_for_status()
    except requests.exceptions.RequestException as e:
        print(f"请求异常: {e}")
        return None
    
    print("响应状态码: {} ".format(response.status_code))
    try:
        # 使用response.json()自动处理编码和解析,比手动loads更可靠
        json_data = response.json()
        return json_data
    except json.JSONDecodeError as e:
        print(f"JSON解析失败: {e}")
        print(f"原始响应内容: {response.text}")
        return None

验证建议

  1. 先在IBM Cloud控制台直接测试Cloud Function,确认返回的JSON包含entries字段,且字段内是正确的经销商文档数据。
  2. 重新运行客户端代码,查看调试日志,确认json_result能正确获取到entries数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:44:53