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

Vue3中如何解析Google知识图谱搜索API返回的JSON-LD数据

解决方案:处理Google知识图谱API的JSON-LD响应

核心问题

你直接把Fetch返回的Response对象resolve了,这不是最终的JSON数据——Fetch返回的响应对象需要调用.json()方法(异步操作)才能解析出实际的JSON内容,而JSON-LD本质就是符合JSON语法的格式,完全不需要额外的jsonld包来解析基础结构。

分步修复

1. 修正globalSearch函数,正确解析响应

直接在Fetch的链式调用中添加response.json()解析步骤,甚至可以直接在这一步提取你需要的itemListElement下的result,减少后续处理:

export async function globalSearch(query) {
  return new Promise((resolve, reject) => {
    const url = `${BASE_URL}${query}&${key}${process.env.VUE_APP_GOOGLE_API_KEY}&${indent}True`;
    console.log("url: " + url);

    fetch(url)
      .then((response) => {
        // 解析响应体为JSON(JSON-LD兼容JSON解析)
        return response.json();
      })
      .then((data) => {
        // 直接提取需要的result数组,处理空值情况
        const results = data.itemListElement?.map(item => item.result) || [];
        resolve(results);
      })
      .catch((err) => {
        console.log("err: " + err.message);
        reject(err.message);
      });
  });
}

2. 修正模板中的v-model语法

Vue模板里绑定v-model不需要加this,直接用变量名:

<td class="inputField">
  <input @keyup.enter="search" v-model="inputTitle" id="global-input" type="text" placeholder="Freitext"/>
</td>

3. 简化search方法,修正字段错误

原来的代码里错误判断了response.items(知识图谱API返回的是itemListElement而非items),且response.item拼写错误,现在直接接收处理好的结果数组即可:

import { globalSearch } from "../api/films-api.js";

// ...

methods: {
  async search() {
    try {
      // 直接接收处理后的result数组
      this.films = await globalSearch(this.inputTitle);
    } catch (err) {
      console.error("搜索失败:", err);
      this.films = [];
    }
  },
}

补充说明

  • JSON-LD只是带语义标记的JSON,结构完全符合JSON规范,所以用标准的response.json()就能解析,不需要引入jsonld包——只有当你需要处理语义上下文、数据合并等高级操作时,才需要用到这个包。
  • 用可选链?.处理itemListElement不存在的情况,避免空值报错,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:22:20