如何向函数传入JSON并读取其值 附SyntaxError报错排查
报错根因
SyntaxError: Unexpected token u in JSON at position 0的触发逻辑非常明确:
JSON.parse()只接受合法JSON格式字符串作为入参,当传入值为undefined时,JS会先把入参转成字符串"undefined",解析时位置0的首字符是u,完全不符合JSON语法规则,直接抛出解析错误。- 对应代码存在两处逻辑问题:
- 调用
getInformation()时没有传入任何参数,函数内的形参data默认值就是undefined - 外层定义的
const data = {"name": "John Lemon", "age":44}本身已经是标准JavaScript对象,不是JSON格式字符串,就算调用时正确传入参数,直接执行JSON.parse(data)也会因为对象被转成字符串"[object Object]",触发新的解析错误。
- 调用
修复方案
根据实际使用场景二选一即可:
场景1:直接操作已定义的JS对象
不需要调用JSON.parse(),调用函数时正确传入对象参数,直接读取属性即可:
const data = {"name": "John Lemon", "age":44} const getInformation = (obj) => { console.log(obj.name) } // 调用时传入提前定义的data对象 getInformation(data) // 运行输出:John Lemon
场景2:需要解析JSON格式字符串
先定义合法的JSON字符串(JSON语法要求键必须用双引号包裹,整体为字符串类型),调用函数时传入该字符串后再执行解析:
// 合法JSON字符串:整体用单引号包裹,内部键值对使用双引号 const jsonData = '{"name": "John Lemon", "age":44}' const getInformation = (dataStr) => { const obj = JSON.parse(dataStr) console.log(obj.name) } // 传入JSON字符串参数 getInformation(jsonData) // 运行输出:John Lemon
内容的提问来源于stack exchange,提问作者ssDev
相关产品推荐
相关产品推荐

