Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.10.2014, 07:20
Интересующийся
Отправить личное сообщение для eniacty Посмотреть профиль Найти все сообщения от eniacty
 
Регистрация: 06.08.2014
Сообщений: 21

преобразовать строку с массивом в массив
Подскажите пожалуйста как преобразовать строку, которая была многомерным массивом, например:
str = "['фильмы', ['Смерч', ['актеры', [Стив Анжело', 'Роберто Родригес']]],['Ураган',['актеры',['Макс Никитин', 'Алексей Ходин']]]]"

в корректный массив, например чтобы при запросе [1][0][1] элемента был Алексей Ходин.

Есть ли для этого готовые реализации функций?

Вообще строка, которую нужно разобрать имеет достаточно глубокий массив со множеством элементов, поэтому просто str.split() то это не очень приятно.
Ответить с цитированием
  #2 (permalink)  
Старый 29.10.2014, 07:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Это называется JSON. И для его разбора есть встренные функции:

var str = '["фильмы", ["Смерч", ["актеры", ["Стив Анжело", "Роберто Родригес"]]],["Ураган",["актеры",["Макс Никитин", "Алексей Ходин"]]]]';
alert(
    JSON.parse(str)[2][1][1][1]
);


Только кавычки там должны быть двойные.

Для обратной операции есть JSON.stringify()
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 29.10.2014 в 07:32.
Ответить с цитированием
  #3 (permalink)  
Старый 29.10.2014, 07:43
Интересующийся
Отправить личное сообщение для eniacty Посмотреть профиль Найти все сообщения от eniacty
 
Регистрация: 06.08.2014
Сообщений: 21

в массиве, могут быть пустые элементы, например [a [,,false,],,]

Последний раз редактировалось eniacty, 29.10.2014 в 08:18. Причина: Уточнил вопрос
Ответить с цитированием
  #4 (permalink)  
Старый 29.10.2014, 08:41
Интересующийся
Отправить личное сообщение для eniacty Посмотреть профиль Найти все сообщения от eniacty
 
Регистрация: 06.08.2014
Сообщений: 21

или [,],[,[,],]
Ответить с цитированием
  #5 (permalink)  
Старый 29.10.2014, 08:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Значит это не валидный JSON. А откуда берется такая глупая строка?
Если источник сторонний, то тебе остается только eval'ить строку. А если сам наговнокодил - то исправляй.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 29.10.2014, 08:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

eniacty, что у вас этот массив формирует? Используйте стандартную функцию для преобразования к json, она во многих языках присутствует, а если и нет - обязательно есть сторонняя.

Если же вам зачем-то надо вместо json городить свой уродливый формат - то придётся писать вручную такой же уродливый парсер.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 29.10.2014, 08:58
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Aetae
придётся писать вручную такой же уродливый парсер.
Ну почему же уродливый. Парсер js-исходников - вполне нормальная штука. Вот только использовать ее здесь - совсем не нормально)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 29.10.2014, 09:30
Интересующийся
Отправить личное сообщение для eniacty Посмотреть профиль Найти все сообщения от eniacty
 
Регистрация: 06.08.2014
Сообщений: 21

эта строка приходит из API.

Получается, что я могу сделать так:

strArr = eval(str);
а потом разбирать strArr как обычный массив.

Но мне бы не хотелось

Есть ли другие варианты?

Последний раз редактировалось eniacty, 29.10.2014 в 09:35.
Ответить с цитированием
  #9 (permalink)  
Старый 29.10.2014, 10:24
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,230

Сообщение от eniacty
Но мне бы не хотелось

Есть ли другие варианты?
Тогда приводи строку в нормальный вид и далее как учили выше...
Ответить с цитированием
  #10 (permalink)  
Старый 29.10.2014, 10:33
Интересующийся
Отправить личное сообщение для eniacty Посмотреть профиль Найти все сообщения от eniacty
 
Регистрация: 06.08.2014
Сообщений: 21

я и так хочу строку привести в нормальный вид - в вид массива
У меня нет доступа к тому, что ее формирует, я лишь отправляю get запрос и получаю в ответе эту строку.

еще есть вариант использовать парсер js-кода, но в результате получается очень неудобный объект.

Последний раз редактировалось eniacty, 29.10.2014 в 10:37.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходими разделить строку на слова и положить слова в массив при помощи цикла for oneee Общие вопросы Javascript 5 05.09.2012 14:30
как преобразовать число 255 в строку "FF" ? kkv Общие вопросы Javascript 6 06.07.2012 03:25
Как перевести json строку в js массив? Tek Общие вопросы Javascript 1 25.03.2012 17:11
преобразовать php массив в массив js zebulun Общие вопросы Javascript 12 02.09.2011 00:49
Преобразовать строку в Number с учетом региональных настроек Mutagena Общие вопросы Javascript 2 15.03.2011 01:22