JavaScript替换JSON元素报错:Unexpected Token at pos 0求助
嗨,我来帮你排查这个解析错误和函数逻辑的问题~
问题根源与修正方案
你遇到的几个核心问题
- 没必要的
JSON.parse调用:defaultMessage.dataElements本身就是一个JavaScript对象,不是JSON字符串!JSON.parse()只能处理JSON格式的字符串,直接把对象塞进去肯定会报"unexpected token"错误——这就是你问题的主要原因。 - 传入的测试参数是无效JSON:你测试时传的
'{"MTI":"1101",{"DE01":"XXX"}}'语法有问题,里面的{"DE01":"XXX"}没有对应的键名,属于不合法的JSON结构。 - 函数返回值和测试期望不匹配:你的函数现在只返回修改后的
dataElements,但测试用例期望返回包含MTI和完整dataElements的整个消息对象。 - 函数定义语法有误:
replaceDefaultElements: (testElements) => {这种写法是对象方法的定义,但你的代码里没把它放在一个对象里(比如const functions = {...}),运行时会触发语法错误。
修正后的完整可运行代码
// 先把函数放在一个对象里,符合你测试时的调用方式 const functions = { replaceDefaultElements: (testElements) => { // 克隆默认消息对象,避免直接修改原数据(浅克隆适合当前的简单结构) const updatedMessage = JSON.parse(JSON.stringify(defaultMessage)); // 兼容传入JSON字符串或直接传对象的情况 const elementsToReplace = typeof testElements === 'string' ? JSON.parse(testElements) : testElements; // 遍历要替换的元素,更新对应字段 Object.keys(elementsToReplace).forEach(key => { // 如果是dataElements里的字段,就更新dataElements if (updatedMessage.dataElements[key] !== undefined) { updatedMessage.dataElements[key] = elementsToReplace[key]; } // 如果是MTI字段,单独更新 if (key === 'MTI') { updatedMessage.MTI = elementsToReplace[key]; } }); return updatedMessage; } }; // 你的默认消息对象 var defaultMessage = { "MTI": "1101", dataElements: { "DE01": "101", "DE02": "201", "DE03": "301", "DE04": "401", "DE05": "501", "DE06": "601", "DE07": "701" } }; // 修正后的Jest测试用例 test('Should replace specified elements correctly', () => { // 可以直接传对象,比传JSON字符串更直观 const testInput = {"DE01":"XXX", "MTI":"1101"}; // 要是想传字符串,得用合法的JSON:'{"DE01":"XXX", "MTI":"1101"}' expect(functions.replaceDefaultElements(testInput)).toEqual({ "MTI": "1101", dataElements: { "DE01": "XXX", "DE02": "201", "DE03": "301", "DE04": "401", "DE05": "501", "DE06": "601", "DE07": "701" } }); });
重点说明
- 不修改原对象:用
JSON.parse(JSON.stringify(...))克隆原对象,防止后续操作污染默认消息数据。 - 参数兼容性:自动处理传入JSON字符串或直接传对象的情况,减少报错概率。
- 匹配测试预期:现在函数返回的是完整的消息对象,和你测试用例里的期望结果完全一致。
- 合法JSON格式:确保传入的参数无论是对象还是字符串,都是符合语法规范的。
内容的提问来源于stack exchange,提问作者Prashanna Narayanasamy
相关产品推荐
相关产品推荐

