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

如何在Node.js中通过名称关键词查询JSON接口对象的ID并输出?

解决方法:根据关键词从Supreme库存接口匹配产品ID

首先,咱们先看看你现有代码里的几个小问题:

  • 变量名大小写错误:JSON里的字段是id,你写的是Id,这会导致提取不到值
  • 代码仅收集了所有ID,但没有实现关键词过滤的核心逻辑
  • 缺少从终端获取用户输入关键词的交互部分

下面是完整的实现方案,我会一步步拆解说明:

完整代码实现

const request = require('request');
const readline = require('readline');

// 创建终端输入交互接口
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// 提示用户输入关键词
rl.question('请输入要搜索的关键词:', (keyword) => {
  // 请求库存JSON数据
  request('http://www.supremenewyork.com/mobile_stock.json', function(error, response, body) {
    if (error) {
      console.error('请求出错:', error);
      rl.close();
      return;
    }

    try {
      const data = JSON.parse(body);
      // 遍历所有分类下的产品,过滤出名称包含关键词的项
      const matchedIds = Object.values(data.products_and_categories)
        .flatMap(categoryProducts => categoryProducts) // 把多分类的产品数组合并成一维数组
        .filter(product => product.name.toLowerCase().includes(keyword.toLowerCase())) // 忽略大小写匹配关键词
        .map(product => product.id); // 提取匹配产品的id

      // 输出结果
      if (matchedIds.length > 0) {
        console.log('匹配到的产品ID:', matchedIds.join('\n'));
      } else {
        console.log('没有找到包含该关键词的产品');
      }
    } catch (parseError) {
      console.error('JSON解析出错:', parseError);
    }

    rl.close();
  });
});

关键部分说明

  1. 终端输入交互:用Node.js内置的readline模块实现终端输入,获取用户的关键词
  2. 错误处理:加入了请求错误和JSON解析错误的捕获,避免程序意外崩溃
  3. 产品过滤逻辑:
    • Object.values获取所有分类下的产品数组
    • flatMap将多维数组扁平化,方便统一处理所有产品
    • filter方法通过toLowerCase()实现大小写不敏感的关键词匹配(比如输入PinBall也能匹配到目标产品)
    • map提取出匹配产品的ID
  4. 结果反馈:区分有匹配和无匹配的情况,给出清晰的输出提示

使用步骤

  1. 先安装依赖包:npm install request
  2. 将代码保存为app.js
  3. 在终端运行:node app.js
  4. 输入关键词(比如pinball),回车后就能看到对应的ID输出啦

这样运行后输入"pinball",控制台就会输出"171495",完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:49:59