Node.js解析JSON并根据名称获取ID的报错问题求助
Node.js解析JSON报错但Python能跑?排查和解决方法
核心差异原因
Python的JSON解析对非标准写法兼容性极强,但Node.js的JSON.parse()严格遵循JSON官方标准,这就是同一份文件两边表现不同的根本原因。下面是最常见的几个坑:
1. 键名未用双引号包裹
Python允许键名不带引号或用单引号,但JSON要求所有键必须用双引号:
Python能解析的错误写法:
{'0005000010105A00': 'Netflix'} # 甚至是不带引号的合法标识符键名 {0005000010105A00: 'Netflix'}符合JSON标准的正确写法:
{"0005000010105A00": "Netflix"}
2. 使用单引号而非双引号
JSON里的字符串(包括键值)必须用双引号,Python支持单引号字符串,这是高频踩坑点。
3. 对象/数组末尾存在多余逗号
Python允许在对象最后一个键值对、数组最后一个元素后加逗号,但JSON直接判为无效:
错误写法:
{"0005000010105A00": "Netflix", "0005000010105B00": "YouTube",}修复后:
{"0005000010105A00": "Netflix", "0005000010105B00": "YouTube"}
4. JSON中混入注释
JSON标准完全不支持//或/* */注释,但Python的部分第三方解析库(如demjson)可能忽略注释,Node.js遇到直接报错。
快速定位错误的方法
直接用Node.js终端测试,替换成你的JSON文件路径运行:
node -e "const fs = require('fs'); JSON.parse(fs.readFileSync('./your-data.json', 'utf8'))"
终端会精准报错到具体行和列,直接对应位置修改即可。
实现按名称查ID的代码示例
假设修复后的JSON是{"ID": "名称", ...}的键值对结构,代码如下:
const fs = require('fs'); // 读取并解析修复后的JSON const platformMap = JSON.parse(fs.readFileSync('./platforms.json', 'utf8')); // 根据名称反向查找ID function getPlatformId(name) { return Object.keys(platformMap).find(id => platformMap[id] === name); } // 测试用例 console.log(getPlatformId('Netflix')); // 输出 0005000010105A00
如果JSON是数组结构(如[{"id": "xxx", "name": "xxx"}, ...]),代码调整为:
const platformList = JSON.parse(fs.readFileSync('./platforms.json', 'utf8')); function getPlatformId(name) { const matchedItem = platformList.find(item => item.name === name); return matchedItem ? matchedItem.id : null; // 未匹配返回null }
内容的提问来源于stack exchange,提问作者yavda
相关产品推荐
相关产品推荐

