преобразовать строку с массивом в массив
Подскажите пожалуйста как преобразовать строку, которая была многомерным массивом, например:
str = "['фильмы', ['Смерч', ['актеры', [Стив Анжело', 'Роберто Родригес']]],['Ураган',['актеры',['Макс Никитин', 'Алексей Ходин']]]]" в корректный массив, например чтобы при запросе [1][0][1] элемента был Алексей Ходин. Есть ли для этого готовые реализации функций? Вообще строка, которую нужно разобрать имеет достаточно глубокий массив со множеством элементов, поэтому просто str.split() то это не очень приятно. |
Это называется JSON. И для его разбора есть встренные функции:
var str = '["фильмы", ["Смерч", ["актеры", ["Стив Анжело", "Роберто Родригес"]]],["Ураган",["актеры",["Макс Никитин", "Алексей Ходин"]]]]'; alert( JSON.parse(str)[2][1][1][1] ); Только кавычки там должны быть двойные. Для обратной операции есть JSON.stringify() |
в массиве, могут быть пустые элементы, например [a [,,false,],,]
|
или [,],[,[,],]
|
Значит это не валидный JSON. А откуда берется такая глупая строка?
Если источник сторонний, то тебе остается только eval'ить строку. А если сам наговнокодил - то исправляй. |
eniacty, что у вас этот массив формирует? Используйте стандартную функцию для преобразования к json, она во многих языках присутствует, а если и нет - обязательно есть сторонняя.
Если же вам зачем-то надо вместо json городить свой уродливый формат - то придётся писать вручную такой же уродливый парсер. |
Цитата:
|
эта строка приходит из API.
Получается, что я могу сделать так: strArr = eval(str); а потом разбирать strArr как обычный массив. Но мне бы не хотелось :) Есть ли другие варианты? |
Цитата:
|
я и так хочу строку привести в нормальный вид - в вид массива :)
У меня нет доступа к тому, что ее формирует, я лишь отправляю get запрос и получаю в ответе эту строку. еще есть вариант использовать парсер js-кода, но в результате получается очень неудобный объект. |
Цитата:
|
Наверняка есть либа для парсинга твоего недо-json.
Еще, наверняка есть способ безопасно заeval'ить эту строку. |
danik.js, да ну. Эвалить чужую строку - не секурно, всегда есть шанс наколоться.)
|
Aetae, нельзя никак? Значит спутал с чем-то. Помню где-то добавляют throw в начало строки зачем-то. Кажется как раз в JSON, чтобы его не eval'или.
.. В голове моей кашка-малашка )) |
Часовой пояс GMT +3, время: 16:14. |