Как создать многомерный массив из JSON запроса?

Добрый день, подскажите как создать многомерный массив из ответа JSON?
Получаю от сервера вот такой ответ:
{
	"RU":[{
		"name":"Русский",
		"img":"/flag/RU.png",
		"courses":{
			"gramm":[{
				"name":"Грамматика",
				"img":"/icon1.png"
			}],
			"prav":[{
				"name":"Правописание",
				"img":"/icon2.png"
			}]
		}
	}],
	"EN":[{
		"name":"Английский",
		"img":"/flag/EN.png",
		"coursess":{
			"gramm":{
				"name":"Грамматика",
				"img":"/icon1.png"
				}
			}
	}]
}


и есть такой обработчик:

$.getJSON(countryUrl)
		.done(function(data){
			var strany = [];
			var kursy = [];
			$.each(data, function(key, info){
				$.each(info, function(index, value){
					strany.push([key, value['name'], value['img']]);
                                       // тут нормальный массив Array('RU', 'Русский', '/flag/RU.png')
					$.each(value['courses'], function(k, v){
						$.each(v, function(k1, v1){
							//console.log('Название = ' + v1['name'] + '; icon = '+ v1['img']);
							// тут я пытался собрать массив, но js выдает ошибку
						});
					});
				});
			});
	       	console.log(strany);
			console.log(kursy);
		})
		.fail(function(){
			//alert("Ошибка выполнения");
		})
		.then(function(){
			//alert("Завершение выполнения");
		});


Массив КУРСЫ должен быть следующего вида (например, на PHP выглядело бы это так):
$kursy = array(
     "RU" => array(
                     "gramm" => array( "name", "img" ),
                     "prav" => array( "name", "img" ),
                 ),
     "EN" => array(
                     "gramm" => array( "name", "img" ),
                 ),
)


Заранее спасибо!
  • Вопрос задан
  • 2552 просмотра
Решения вопроса 1
pterodaktil
@pterodaktil
js developer
const data = {
  "RU":[{
    "name":"Русский",
    "img":"/flag/RU.png",
    "courses":{
      "gramm":[{
        "name":"Грамматика",
        "img":"/icon1.png"
      }],
      "prav":[{
        "name":"Правописание",
        "img":"/icon2.png"
      }]
    }
  }],
  "EN":[{
    "name":"Английский",
    "img":"/flag/EN.png",
    "courses":{
      "gramm":[{
        "name":"Грамматика",
        "img":"/icon3.png"
        }]
      }
  }]
}

Хотелось бы видеть валидные данные в следующий раз, а не сидеть и править самому ;)
const countries = [], courses = [];

$.each(data, (lng, [{ name, img, courses: crs }]) => {
  countries.push([lng, name, img]);
  
  $.each(crs, (crsName, [{ name, img }]) => {
    courses.push([lng, name, img])
  })
});

countries // 
[
  ["RU", "Русский", "/flag/RU.png"],
  ["EN", "Английский", "/flag/EN.png"]
]
courses //
[
  ["RU", "Грамматика", "/icon1.png"],
  ["RU", "Правописание", "/icon2.png"],
  ["EN", "Грамматика", "/icon3.png"]
]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы