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

 我来答
Joenvci
2018-04-05 · TA获得超过1.4万个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:28.5万
展开全部

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也会报这个错误。

威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
xiaojin955
2018-10-28
知道答主
回答量:2
采纳率:0%
帮助的人:1592
展开全部
这是说明在程序在读取JSON文件时,碰到意外的命令。有种可能是因为你的json文件创建或者添加时,默认的文件格式不正确。意外的那条指令就是默认的含有bom
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花开丶五丁目
2016-07-11 · TA获得超过515个赞
知道小有建树答主
回答量:350
采纳率:0%
帮助的人:381万
展开全部
unexpected token o in json at position 1
意外的标记在JSON在位置1

unexpected token o in json at position 1
意外的标记在JSON在位置1
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
函孤容0K7
2017-06-20 · TA获得超过290个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:42.8万
展开全部
unexpected token o in json at position 1意外的标记在JSON在位置1unexpected token o in json at position 1意外的标记在JSON在位置1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式