• 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

  • 相关阅读:
    Vue路由重定向
    Vue使用rules对表单字段进行校验
    CSS Flex弹性布局实现Div
    Leetcode5 最长回文子串
    Java中char与String的相互转换
    [剑指offer] 替换空格
    Leetode最长回文串
    JavaScript 常用正则表达式集锦
    JavaScript 函数节流
    JavaScript target 与 currentTarget 区别
  • 原文地址:https://www.cnblogs.com/aashui/p/9932175.html
Copyright © 2020-2023  润新知