2013-03-14 2 views
1

Как бы я взять строку (что я получил от страницы, используя текст JQuery (в)), такие как:преобразования строки в динамический массив с переменными в JavaScript

var myData = "[{name:'xxx',data:[1,2,3,4,5]},{name:'yyy',data:[5,4,3,2,1]}]"; //this is a string :(

И превратить его в фактический Javascript объект Мне нужно, так, например:

var myObject = [{name:'xxx',data:[1,2,3,4,5]},{name:'yyy',data:[5,4,3,2,1]}]; 

так «имя» и «данные» будут нединамическими переменными, однако имена значения, массив данных и длина MyObject будет динамичной.

Не знаю, с чего начать. Я предполагаю, что мне придется делать много сплит и циклов, но я открыт для предложений.

+1

написать парсер, используйте 'eval' или изменить формат, чтобы использовать действительный JSON вместо разметки , –

+1

Вам необходимо JSON-форматировать его, а затем использовать парсер JSON. Это выше не JSON. –

ответ

2

Ну, это можно сделать очень легко:

var myObject = eval(myData); 

Однако, вы должны знать от рисков функции eval. Поскольку он запускает значение как выражение Javascript, он также запускает любой вредоносный код, который будет в строке, поэтому вы должны использовать его только в том случае, если у вас есть полный контроль над тем, что находится в строке.

Если бы вы могли изменить формат быть JSON можно смело разобрать его без риска инъекции кода:

var myData = '[{"name":"xxx","data":[1,2,3,4,5]},{"name":"yyy","data":[5,4,3,2,1]}]'; 

var myObject = $.parseJSON(myData); 
+2

@knicket, это ответ. Обратите внимание: ваш серверный язык будет иметь средства для JSONify собственного объекта или массива на сервере для строки, поэтому не поддайтесь соблазну DIY. PHP, например, имеет 'json_encode()' (и 'json_decode()').Тем не менее, вы должны попытаться понять, что такое JSONified-строка (и нет) и как она функционально отличается от того, что она целует двоюродного брата объекта буквального синтаксиса в Javascript, который является форматом ваших данных в вопросе (с двойными кавычками, обернутыми вокруг). –

0

Вы имеете в виду,

var myObject = eval('(' + myData + ')'); 

?

EDIT

Ее основной кон является то, что вы можете поместить любого яваскрипт кода (не только JSON) для Eval (F12 Хрома позволяет любому эксплуатировать это). AS вы используете jQuery, лучший выбор будет

var myObject = $.parseJSON(myData); 

для кросс-браузера совместимости.

$.parseJSON

Принимает хорошо сформированную строку JSON и возвращает полученный JavaScript объект. Передача в некорректной строке JSON может привести к тому, что будет выбрано исключение . Например, следующие все деформированные JSON строки:

{test: 1} (test does not have double quotes around it).

{'test': 1} ('test' is using single quotes instead of double quotes).

+1

Действующее решение, но обычно рекомендуется дать правильные предупреждения, предлагая 'eval'. * (На самом деле, учитывая код в вопросе, это было единственное правильное решение до @ Guffa's.) * –

Смежные вопросы