我有一个返回以下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
为什么会这样?我该如何动态分配它?
答案 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>