JSON对象被视为字符串

时间:2013-12-19 14:08:07

标签: javascript json

我有一个返回以下JSON的ajax调用:

returnedData = "[ 
    { id: 1, firstName: 'John', lastName: 'Smith', address: '123 Spa Road', city: 'London', 
        orders: 
        [ 
            { product: 'TV', price: 599.99, quantity: 2, orderTotal: 1199.98 } 
        ]
    }
]";

var customers = JSON.parse (returnedData);
console.log(customers.length); // prints length of the string data

它将其视为字符串。但是,我直接分配结果。

var customers = [ 
    { id: 1, firstName: 'John', lastName: 'Smith', address: '123 Spa Road', city: 'London', 
        orders: 
        [ 
            { product: 'TV', price: 599.99, quantity: 2, orderTotal: 1199.98 } 
        ]
    }
];

console.log(customers.length); // prints 1 - the number of objects

为什么会这样?我该如何动态分配它?

5 个答案:

答案 0 :(得分:3)

通过http://jsonlint.com/运行代码,您会发现代码中存在错误。

将对象文字粘贴到验证器中,您将看到

Parse error on line 2:
[    {        id: 1,        first
--------------^
Expecting 'STRING', '}'

您需要在名称和字符串值周围加上双引号。

答案 1 :(得分:1)

您必须用双引号包装属性:

var returnedData = '[{ "id": 1, "firstName": "John"}]';

答案 2 :(得分:1)

returnedData不是有效的JSON消息(属性不包含双引号),但您可以将其视为JS正在执行

var customers = eval(returnedData);

如果您想使用JSON.parse,请更正returnedData

答案 3 :(得分:1)

您收到的字符串不是有效的JSON对象。注意不要混淆JSON和JavaScript。看看这个例子:

var returnedData = '[ { "id": 1, "firstName": "John", "lastName": "Smith", "address": "123 Spa Road", "city": "London", "orders": [ { "product": "TV", "price": 599.99, "quantity": 2, "orderTotal": 1199.98 } ] } ]';

var customers = JSON.parse (returnedData);
console.log(customers.length); // the correct length now.

请注意,唯一的区别是我把字符放在字典中的“。”。

答案 4 :(得分:1)

你有问题吗?

这是你形成的json

var returnedData ='[
    {
        "id": 1,
        "firstName": "John",
        "lastName": "Smith",
        "address": "123SpaRoad",
        "city": "London",
        "orders": [
            {
                "product": "TV",
                "price": 599.99,
                "quantity": 2,
                "orderTotal": 1199.98
            }
        ]
    }
]';

单引号必须转义或不使用它们...您可以在打开和关闭字符串时使用它们,使其比其他可能性更好(由于@Victor Canova的有用评论而更正)< / p>