JSON转换异常——SyntaxError: Unexpected token n in JSON at position 1 如何处理
如题,JSON字符串转换JSON格式报错:
这个问题,一般在JSON字符串转换JSON对象的时候才会出现的,下面就详细介绍下。
为什么会出现这个问题?
对于JSON来说,主要由两种格式,一种是对象,另一种是数组,如下:
//JSON 对象 var jsonObj={ "name":"json", "alexa":10000, "site":null } //JSON 数组 var jsonArr=[ "Google", "Runoob", "Taobao" ] //亦或者 var jsonArr=[ { "name":"json", "alexa":10000, "site":null },{ "name":"json", "alexa":10000, "site":null } ]
这么看,跟 javascript的对象和数组并没有什么区别。但是有一点需要注意的是,JSON中对象的key值是必须要有引号的(js对象的key是不需要引号的,虽然也能兼容带引号的写法)。
那么,再来看下JSON.parse的用法:
JSON.parse(text[, reviver])
其中:
- text:必需, 一个有效的 JSON 字符串;
- reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
如上,JSON.parse()函数接收的是有效的JSON字符串,如这样:
//正确用法示例 var jsonStr = '{"name":"jsonStr", "type":"str"}' var jsonObj = JSON.parse(jsonStr) //输出 { "name":"runoob", "alexa":10000, "site":"www.runoob.com" }
那么,普通js对象格式的字符串呢?
//正确用法示例 var objStr = '{name:"objStr", type":str"}' var jsonObj = JSON.parse(objStr) //SyntaxError: Unexpected token n in JSON at position 1
如上,由于JSON.parse()接收了无效的JSON字符串,导致报错。
那么如何解决这个问题呢?
JSON通常被用来与服务器端交换数据,接收服务器数据时一般是字符串,由前端将JSON数据线转换为JSON数据。
如果后端返回的字符串数据中是无效的JSON字符串(key无引号),那么就无法使用JSON.parse()来进行数据转换了。
对于非有效JSON字符串,可以使用JS的eval()函数进行转换:
var str = '{name:"小明",age:18}'; var json = eval("("+str+")")
除了字符串格式,还有些后端开发会直接返回xml格式数据给到前端,也可能会出现这个问题。如果是这样也只有使用eval()函数了。
当然,这是在明确数据源的情况下使用eval(),eval也并不是能那么随意的使用的。eval也存在一个安全问题,就是它可以执行传给它的任何字符串,所以永远不要传入字符串或者来历不明、不受信任源的参数,以免造成不可预知的后果。
对eval感兴趣的可以详细研究了解下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-10-29 微信小程序开发——开发者工具中素材管理功能使用的注意事项