2011-08-30 81 views
2

我有我在JAVA中生成的這個字符串,並傳遞給javascript進行解析。使用JSON解析而不是eval

這工作:

var childString = '[{title: "Item 1"},{title: "Folder 2", isFolder: true,children: [{title: "Sub-item 2.1"},{title: "Sub-item 2.2"}]},{title: "Item 3"}]'; 
var childArray = eval(childString); 

但我讀過到處是eval == evil所以我尋找到解析的JSON方式。我試過使用JSON.parse(childString),但我得到了一個錯誤。

我怎麼能做到這一點的JSON方式?

謝謝!

+5

_'but但我得到一個錯誤。'_什麼是錯誤? –

+1

我很確定*你的意思是'eval ===邪惡'。 :) –

+2

http://jsonlint.com/是你的朋友。 –

回答

3

你不能使用JSON.parse解析它,因爲你的json字符串是無效的。它需要如下:

var childString = '[{"title": "Item 1"},{"title": "Folder 2", "isFolder": true,"children": [{"title": "Sub-item 2.1"},{"title": "Sub-item 2.2"}]},{"title": "Item 3"}]'; 

See here.

1

在您的HTML輸出中使用script標記包含JSON2,然後您可以使用JSON.parse

7

您的數據是有效的JavaScript(這就是爲什麼eval作品),但它是不是有效的JSON。例如,您需要用引號括住您的屬性名稱。

E.g.

'[{"title": "Item 1"} ... 

您可以找到JSON規範here

3

您的JSON格式不正確。您需要同時在雙引號。

'{"foo":"bar"}' 
1

好,jsFiddle

var childArray = JSON.parse(childString.replace(/([{, ])([a-zA-Z0-9]+):/g, '$1"$2":')); 

會的工作,但我可能還是設法得到有效的JSON代替。

1

注:雙引號是必要的。 這不會工作:

var childString = "[{'title': 'Item 1'},{'title': 'Folder 2', 'isFolder': true,'children': [{'title': 'Sub-item 2.1'},{'title': 'Sub-item 2.2'}]},{'title': 'Item 3'}]"; 
+0

需要在字符串中傳遞雙引號。因此,您需要單引號對象'[.....]'並在內部使用雙引號'[「」...「」...「」]'。 – user945389