zoukankan      html  css  js  c++  java
  • Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) SyntaxError: Unexpected token R in JSON at position 0 at JSON.parse (<anonymous>)

    这个问题在之前做项目时碰到过一次,当时按照网上的做法,去掉JSON.parse()这一层转换后就没有这个报错了,数据也能正常使用,就没多想,也没深究是什么原因。可是这次又碰到了,所以这次我必须要弄明白原因。

    先看看它的作用
    JSON.parse()用于从一个字符串中解析出json对象,如

    var str = '{"name":"LeonWu","age":"18"}'

    JSON.parse(str);

    //结果为一个Object
    // age: "18";
    // name: "LeonWu";
    1
    2
    3
    4
    5
    6
    7
    JSON.stringify()用于从一个对象解析出字符串,如

    var a = {a:1,b:2,c:"LeonWu"};

    JSON.stringify(a);

    //结果为 "{"a":1,"b":2,"c":"LeonWu"}"
    1
    2
    3
    4
    5
    6
    背后的原因
    报错的原因:
    因为你要转换的数据本来就是object,这个方法是把一个字符串解析出json对象,你再转换就会报错;

    为什么会有这样的错误:
    因为把Object作为参数传到JSON.parse()里时,它会默把Object转为string,
    就会先调用原型上的toString()方法;结果为”[object Object]”,JSON.parse将第一个字符’[‘理解为数组的开始,第二字符’o’不知道怎么处理;所以就抛出了上面的错误信息 Unexpected token o in JSON at position 1。
    ---------------------

    JSON字符串:
    var str1 = '{ "name": "cxh", "sex": "man" }'; 
    JSON对象:
    var str2 = { "name": "cxh", "sex": "man" };

    一、JSON字符串转换为JSON对象

    要使用上面的str1,必须使用下面的方法先转化为JSON对象:

    //由JSON字符串转换为JSON对象

    var obj = eval('(' + str + ')');

    或者

    var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

    或者

    var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

    然后,就可以这样读取:

    Alert(obj.name);

    Alert(obj.sex);

    特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。

    二、可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。

    例如:

    var last=obj.toJSONString(); //将JSON对象转化为JSON字符

    或者

    var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

    在使用JSON.parse的时候,返回来的数据一定是严格的json格式,key值一定要用 双引号 包起来,否则浏览器就会抛出异常。
    另外,对于不标准的json字符串,如第一种示例,使用eval()虽然可以正常解析,但是从安全的角度来讲,一定要谨慎使用eval方法。规范json格式。



    参考:https://blog.csdn.net/wxl1555/article/details/79184076

  • 相关阅读:
    android中实现监听的四种方法
    Jpgraph小应用
    正则表达式的初运用-认证界面
    Oracle案例04——TNS-12547: TNS:lost contact
    通过触发器记录数据库连接信息
    MySQL案例02:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
    Oracle案例04——ORA-39700: database must be opened with UPGRADE option
    Oracle案例03——RMAN-06091: no channel allocated for maintenance (of an appropriate type)
    Xwiki安装部署详解
    MySQL案例01:Last_SQL_Errno: 1755 Cannot execute the current event group in the parallel mode
  • 原文地址:https://www.cnblogs.com/aashui/p/9932175.html
Copyright © 2011-2022 走看看