NodeJS请求NPM registry如何读取带引号动态键名的JSON值
解决方案
NPM Registry返回的versions是标准键值对对象,版本号作为字符串类型的键是JSON序列化的正常表现,不存在解析障碍,动态键场景按以下方式读取即可:
- 读取全量版本信息
直接用Object.keys()/Object.values()/Object.entries()遍历对象,不需要提前预知具体版本号:
import fetch from "node-fetch"; const url = "https://registry.npmjs.com/[package-name]"; const settings = { method: "GET" }; fetch(url, settings) .then(res => res.json()) .then((json) => { const versions = json.versions; // 获取所有版本号数组 例:['1.0.0', '1.1.0', '2.0.0'] const allVersionNumbers = Object.keys(versions); console.log('所有已发布版本:', allVersionNumbers); // 遍历读取每个版本的详情 Object.entries(versions).forEach(([versionNum, versionDetail]) => { console.log(`版本${versionNum}详情:`, versionDetail); }) });
- 读取最新版本信息
不需要手动比对版本号,接口返回的dist-tags.latest字段直接给出当前最新稳定版的版本号,通过方括号语法动态取值即可:
fetch(url, settings) .then(res => res.json()) .then((json) => { const latestVerNum = json['dist-tags'].latest; // 动态键统一用方括号读取,不要用点语法 const latestVerDetail = json.versions[latestVerNum]; console.log('最新版本详情:', latestVerDetail); });
- 读取指定版本信息
直接将目标版本号作为字符串传入方括号读取即可,例如读取1.0.0版本:json.versions['1.0.0']
注意:含特殊字符(点、横杠等)的键、动态生成的键禁止用点语法读取,比如
json.versions.2.0.0属于非法语法,这类场景必须使用方括号语法传字符串键取值。
内容的提问来源于stack exchange,提问作者javascriptdeveloper505
相关产品推荐
相关产品推荐

