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

如何解决Alan Studio中JSON解析articles数组返回undefined问题

问题说明
  • 在Alan Studio开发语音新闻查询功能,调用新闻API接口后,接口会返回包含articles数组的响应对象,需要解析出该字段存储后传递给React端,用于渲染新闻卡片组件
  • 故障表现:在api.request的回调中对响应body执行JSON.parse后,解构得到的articles值为undefined,无法正常使用
故障排查与正确实现方式

先明确标准新闻API返回结构

{
  "status": "ok",
  "totalResults": 32,
  "articles": [
    {
      "source": {"id": "xxx", "name": "媒体名称"},
      "title": "新闻标题",
      "description": "新闻摘要",
      "url": "新闻详情链接",
      "urlToImage": "新闻封面图地址",
      "publishedAt": "发布时间"
    }
  ]
}

常见出错点修复

1. 不要混淆响应对象和响应内容

api.request回调的三个参数依次是请求错误、响应头对象、响应体内容,很多人误把第二个参数res(响应头对象)当成响应体执行解析,自然拿不到业务字段。
另外部分Alan Studio版本的请求封装会自动对响应体做JSON解析,如果已经是对象类型,重复执行JSON.parse会抛出异常,导致后续逻辑走不通。

2. 正确解析代码实现

api.request(
  "你的新闻API请求完整地址",
  { method: "GET" },
  (err, res, body) => {
    // 先处理请求错误
    if (err) {
      console.error("新闻接口请求失败:", err);
      return;
    }

    // 兼容自动解析/未自动解析两种情况
    const responseData = typeof body === "string" ? JSON.parse(body) : body;

    // 容错:校验articles字段是否为数组,避免接口返回异常结构时报错
    const articles = Array.isArray(responseData.articles) ? responseData.articles : [];

    // 传递给React端,对应React端用onAlanEvent监听对应事件即可
    this.callClient("updateNewsList", articles);
  }
);

3. 特殊场景适配

如果执行上述代码还是拿不到值,先在解析后打印完整responseData确认层级:

  • 部分网关封装会把接口实际返回内容嵌套在data或body字段下,这时候需要取responseData.data.articles或responseData.body.articles
  • 接口返回错误(比如API密钥无效、参数缺失、请求超限)时,响应结构里不会有articles字段,必须加数组类型校验,避免后续渲染逻辑报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:45:44