如何将指定数据转为JSON对象?JSON.parse报SyntaxError问题咨询
解决JSON.parse()报SyntaxError: Unexpected token o的问题
这个错误我太熟了!你遇到的问题根源特别清晰:你尝试用JSON.parse()去解析一个已经是JavaScript对象的值,而不是JSON格式的字符串。
先拆解下你的代码:
var t = { message: [ { timestamp: 1522007930599, tags: [Array], _id: '5aacb7cc0281b558debacf26', message_link: 'String', __v: 0 }, ] } var r = JSON.parse(t)
这里的t是一个原生的JavaScript对象,不是JSON字符串。JSON.parse()的核心作用是把JSON格式的字符串转换成JS对象,而你给它传了一个已经是对象的值时,JS会先把这个对象自动转成字符串"[object Object]",再去解析这个字符串——这自然会报错,因为这个字符串开头的o完全不符合JSON的语法规范。
下面分两种场景给你解决方案:
场景1:你本来就需要使用这个JS对象
如果t已经是你需要的目标对象,那根本不需要JSON.parse(),直接用就行:
var t = { message: [ { timestamp: 1522007930599, tags: [Array], _id: '5aacb7cc0281b558debacf26', message_link: 'String', __v: 0 }, ] } // 直接访问对象属性即可 console.log(t.message[0].timestamp) // 输出1522007930599
场景2:你确实需要从JSON字符串转对象
如果你的数据源本来应该是JSON字符串(比如从后端接口获取、从localStorage读取的内容),那你需要确保t是符合JSON规范的字符串——注意JSON的键必须用双引号包裹,数组最后不要加多余的逗号:
// 符合JSON规范的字符串格式 var t = '{"message": [{"timestamp": 1522007930599, "tags": [], "_id": "5aacb7cc0281b558debacf26", "message_link": "String", "__v": 0}]}' var r = JSON.parse(t) console.log(r) // 此时能正常解析为JS对象
最后给你个小技巧:如果不确定变量的类型,可以先用typeof t检查,要是输出"object",那绝对不能用JSON.parse();如果是"string",再检查字符串是否符合JSON的语法要求。
内容的提问来源于stack exchange,提问作者Vinayak Shrivastava
相关产品推荐
相关产品推荐

