unexpected token o in json at position 1 什么意思

如题所述

JSON报错问题的解决

今天在项目中,有一个angularJS的页面,使用$http请求后台返回JSON,结果报错Unexpected token in JSON at position 650,控制台显示的是angular内部JSON.parse时报错的。这就定位到不是angular的问题,是返回的JSON字符串有问题。然后查看开发者工具中的network,找到返回的结果,拷贝出来,通过FE工具格式化JSON,这个工具没有报错,能够正常转换。

之后修改代码,在$http添加transformResponse方法,并且把返回的结果绑定到window对象上。

$http({

url:link,

data:param,

transformResponse:function(rst){

window.rcdt=rst;

}

}).success(function(res){

//....

});

对代码做了以上修改后,在chrome的控制台里面通过

输入window.rcdt打印出返回的字符串,看不出问题来,

然后通过,JSON.parse(window.rcdt),报错Unexpected token in JSON at position 650。

之后,再在控制台输入window.rcdt=window.rcdt.replace(/\s+/,""),将字符串中的空格去除。

这时候再输入JSON.parse(window.rcdt);JSON转换正常,没有报错。

到这里,算是定位到问题,是JSON中包含了特殊字符

之后又找到请求url对应的后台,发现后台返回的是一个jsp页面,并且当初是我为了省事在jsp页面中使用EL表达式拼接的JSON字符串。

[

<c:foreach items="${myList}" var="me" varStatus="st">

{"name":"${me.name}","age":"${me.age}","content":"${me.content}"}<c:if test="!st.last">,</c:if>

</c:foreach>

]

在JSP页面中是这样写的,通过el表达式和JSTL标签生成的JSON字符串。这种写法本没有错误,能够正确返回JSON字符串的。

但是,问题就出在${me.conent}上,它的值是通过前台输入保存的.

前台这样输入后,获取的textarea中的value值里面,包换了换行符“\n”。这个换行符在前台展示是可以的,浏览器不认它是换行,但是保存数据库,并且后台没有对换行符进行处理。所以最后获取到的JSON字符串中也就包含了换行符。而JSON.parse报错的原因就是因为换行符。

所以,要对conent中的换行符进行替换。

<% request.setAttribute("vv","\n");%>

[

<c:foreach items="${myList}" var="me" varStatus="st">

{"name":"${me.name}","age":"${me.age}","content":"${fn:replace(me.content,vv,'')}"}<c:if test="!st.last">,</c:if>

</c:foreach>

]

使用jstl的fn函数对content中的换行符进行替换。因为replace函数中直接填"\n"会报错,所以使用request.setAttribute将“\n”设置为变量再使用,这样就能正常替换了。

到这里,问题解决了,前台也能正常转换成JSON了,不再报错了。这个问题说起来简单,但找问题的时候,花了两个小时。所以记录下来,也便于遇到同样问题的人能够快速解决问题。

另外,如果JSON.parse报错为:Unexpected token o in JSON at position 1,那就很有可能不是JSON字符串的问题,而是你调用了两次JSON.parse导致的。

或者对已经是JSON对象的对象调用JSON.parse也会报这个错误。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-28
这是说明在程序在读取JSON文件时,碰到意外的命令。有种可能是因为你的json文件创建或者添加时,默认的文件格式不正确。意外的那条指令就是默认的含有bom
第2个回答  2016-07-11
unexpected token o in json at position 1
意外的标记在JSON在位置1

unexpected token o in json at position 1
意外的标记在JSON在位置1本回答被提问者采纳
第3个回答  2017-06-20
unexpected token o in json at position 1意外的标记在JSON在位置1unexpected token o in json at position 1意外的标记在JSON在位置1

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网