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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:17:13