Как я могу преобразовать текстовый массив JSON в массив JavaScript? - PullRequest
0 голосов
/ 17 августа 2011

У меня есть следующий текстовый объект:

[{message="Hello World"}]

Как я могу преобразовать это в массив JavaScript?

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Вы можете заменить = на :, а затем использовать JSON.parse.Тогда вам нужно будет обернуть сообщение ".

// error = not :
JSON.parse('[{message="Hello World"}]')

// errors = message not "message"
JSON.parse('[{message="Hello World"}]'.replace('=',':'))

Попробуйте:

var message = '[{message="Hello World"}]'
message = message.replace('message', '"message"').replace('=',':')
JSON.parse(message)

Вы можете использовать eval, чтобы сделать то же самое:

// still gotta replace the '='
eval('[{message="Hello World"}]'.replace("=",":"))

Но у eval есть другие проблемы:

eval('window.alert("eval is evil")')

Так что будьте осторожны.Убедитесь, что вы знаете, что вы оцениваете.

2 голосов
/ 17 августа 2011

Это JSON . Если вы используете jquery, то

var arr = jQuery.parseJSON('[{message="Hello World"}]');
alert(arr[0].message);

Гораздо менее «безопасный» метод -

var arr = eval('[{message="Hello World"}]');

, после чего arr будет таким же, как версия jquery.

Однако, вероятно, должно быть [{message:"Hello World"}], чтобы быть правильным действительным json.

1 голос
/ 17 августа 2011

Несмотря на то, что это недопустимый JSON, вы можете заменить все = на :, добавить кавычки в ключи и затем преобразовать их, используя JSON.parse:

//text = '[{message="Hello World"}]'
text = text.replace(/(\w+)\s*=/g, "\"$1\":");
var array = JSON.parse(text);

Если JSON.parse не поддерживается, вы можете использовать eval:

//text = '[{message="Hello World"}]'
text = text.replace(/(\w+)\s*=/g, "\"$1\":");
var array = eval("("+text+")");

Хотя это не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...