如何在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(); }); });
关键部分说明
- 终端输入交互:用Node.js内置的
readline模块实现终端输入,获取用户的关键词 - 错误处理:加入了请求错误和JSON解析错误的捕获,避免程序意外崩溃
- 产品过滤逻辑:
Object.values获取所有分类下的产品数组flatMap将多维数组扁平化,方便统一处理所有产品filter方法通过toLowerCase()实现大小写不敏感的关键词匹配(比如输入PinBall也能匹配到目标产品)map提取出匹配产品的ID
- 结果反馈:区分有匹配和无匹配的情况,给出清晰的输出提示
使用步骤
- 先安装依赖包:
npm install request - 将代码保存为
app.js - 在终端运行:
node app.js - 输入关键词(比如
pinball),回车后就能看到对应的ID输出啦
这样运行后输入"pinball",控制台就会输出"171495",完全符合你的需求~
内容的提问来源于stack exchange,提问作者user9861465
相关产品推荐
相关产品推荐

