2013-12-19 67 views
0

处理我有一个AJAX调用返回以下JSON:JSON对象作为字符串

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 

这是为什么?我如何动态分配它?

+1

不知道你的意思'打印长度string' –

+1

什么代码编写的方式,它不会返回任何东西,但一个错误。 “未捕获的SyntaxError:非法令牌非法” – epascarello

+4

这不是有效的JSON。这将是一个有效的JavaScript文字,但它不是JSON。 – deceze

回答

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 
      } 
     ] 
    } 
]'; 

单引号必须转义或不使用他们...你可以使用它们,当你打开和关闭的字符串,它比其他posibilitys更合式(CORRE特德因为@Victor卡诺瓦)有用的评论

+0

你总是可以在这里查看您的JSON代码:[http://jsonlint.com/](http://jsonlint.com/) – Dwza

+2

只是好奇,“单引号的arent允许”你的意思是,如果使用内他们必须scaped JSON,对吧? –

3

通过http://jsonlint.com/运行代码,你会发现你在你的代码有错误。

粘贴你的对象字面到验证你会看到

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

你需要有各地的名称和字符串值双引号。

1

你必须用双引号包裹属性:

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

returnedData是不是一个有效的JSON消息(属性不使用双引号包裹),但你可以把它当作JS做

var customers = eval(returnedData); 

如果你想使用JSON.parse,纠正returnedData

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. 

注意,唯一的区别是,我把钥匙放在字典里“的

+0

谢谢。那是我错过的。 – user3087969