解析json字符串时遇到问题

时间:2014-07-17 00:02:30

标签: javascript json

我正在尝试解析这个简单的json字符串:

var dataJSON = {};
    var data;

            dataJSON = {
            "status": "OK", 
            "messages" : [{
                "user" : {
                    "id" : "4",
                    "status" : "offline",
                    "name" : "dummy",
                    "pictures" : ["pic.jpg"]
                },
                "message" : "Hey",
                "timestamp" : 1395660658
            }, {
                "user" : {
                    "id" : "2",
                    "status" : "online",
                    "name" : "dummy1",
                    "pictures" : ["pic1.jpg"]
                },
                "message" : "hello",
                "timestamp" : 1395660658
            }]
        };

        console.log('test');
        console.log(dataJSON);

        //parse data
        data = JSON.parse(dataJSON);

但是我收到以下错误:

“无法解析json字符串”

我知道为什么,干杯。

1 个答案:

答案 0 :(得分:2)

你根本不需要解析它;它已经是一个JavaScript对象了。

首字母缩略词“JSON”代表 J ava S cript O bject N otation。它是JavaScript中用于“动态”创建对象的本机语法的受限形式。换句话说,JavaScript的本机对象文字语法是JSON的超集。您在那里键入的内容,因为“dataJSON”变量的值是JavaScript对象文字表达式。这种表达式的值是对对象的引用。不需要解析,因为JavaScript解析器本身已经这样做了。

编辑 - 如果您确实需要JSON字符串用于测试目的,那么我认为最简单的方法是使用JSON.stringify()将对象转换为字符串,并且然后将其传递给测试代码。在您的示例中,看起来像:

    dataJSON = JSON.stringify({
        "status": "OK", 
        "messages" : [{
            "user" : {
                "id" : "4",
                "status" : "offline",
                "name" : "dummy",
                "pictures" : ["pic.jpg"]
            },
            "message" : "Hey",
            "timestamp" : 1395660658
        }, {
            "user" : {
                "id" : "2",
                "status" : "online",
                "name" : "dummy1",
                "pictures" : ["pic1.jpg"]
            },
            "message" : "hello",
            "timestamp" : 1395660658
        }]
    });

由于“引用引用”的麻烦,这比手工构建字符串要容易一些。当然,您传入的对象应该是一个实际可以表示为JSON的对象,但上面的示例肯定没问题。