Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2013, 08:09
Новичок на форуме
Отправить личное сообщение для timkit Посмотреть профиль Найти все сообщения от timkit
 
Регистрация: 27.01.2012
Сообщений: 8

Сохранить древовидную структуру в JSON
Всем привет! Очень прошу помочь с решением задачи.
Есть дерево:
<body>
<ul id="tree">
    <li data-id="0">Автомобили
        <ul>
            <li data-id="1">Japan
                <ul>
                    <li data-id="2">Toyota
                        <ul>
                            <li data-id="3">Camry</li>
                            <li data-id="4">Avensis</li>
                        </ul>
                    </li>
                    <li data-id="5">Mazda</li>
                </ul>
            </li>
        </ul>
</ul>
</body>

необходимо это дерево поместить в объект вида:
var cars={
Автомобили:{"children":[1], id="0"},
Japan:  {"children":[2], id="1"},
Toyota:{"children":[3, 4], id="2"},
Mazda:{"children":[], id="5"}                  
}

пробовал разными способами делать обход дерева, но ничего не получается.
Через рекурсию:

function scan(el, obj) {
        var nodeList = el.childNodes;
        if (nodeList != null) {
            obj["children"]=[];
            for (var i = 0; i < nodeList.length; i++) {
                if (nodeList[i].nodeType == 1) {
                    if(nodeList[i].firstChild.nextSibling.dataset.id)
                    obj["child"].push(nodeList[i].firstChild.nextSibling.dataset.id);
                }

                scan(nodeList[i], obj["children"]);
            }
        }
       return obj;
    }
    scan(document.getElementById('tree'), {})
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2013, 09:46
Новичок на форуме
Отправить личное сообщение для timkit Посмотреть профиль Найти все сообщения от timkit
 
Регистрация: 27.01.2012
Сообщений: 8

прошу прощения:

var cars={
Автомобили:{"children":[1], id:"0"},
Japan: {"children":[2], id:"1"},
Toyota:{"children":[3, 4], id:"2"},
Mazda:{"children":[], id:"5"}
}
Ответить с цитированием
  #3 (permalink)  
Старый 16.12.2013, 10:57
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Правильный объект:
var cars = {
	"Автомобили" : {
		"id"      : 1,
		"country" : {
			"Japan" : {
				"id"   : 11,
				"mark" : {
					"Toyota" : {
						"id"    : 111,
						"model" : {
							"Camry"   : { "id" : 1111 },
							"Avensis" : { "id" : 1112 }
						}
					},
					"Mazda" : {
						"id"    : 112,
						"model" : {
							"CX-9" : { "id" : 1121 }
						}
					}
				}
			},
			"Russia" : {
				"id"   : 12,
				"mark" : {
					"Lada" : {
						"id"    : 121,
						"model" : {
							"Kalina" : { "id" : 1211 },
							"Priora" : { "id" : 1212 }
						}
					},
					"UAZ" : {
						"id"    : 122,
						"model" : {
							"Patriot" : { "id" : 1221 }
						}
					}
				}
			}
		}
	}
};

alert( cars['Автомобили'].country['Japan'].mark['Toyota'].model['Camry'].id );
alert( cars['Автомобили'].country['Russia'].mark['Lada'].model['Kalina'].id );

Последний раз редактировалось Rise, 16.12.2013 в 11:15.
Ответить с цитированием
  #4 (permalink)  
Старый 16.12.2013, 11:23
Новичок на форуме
Отправить личное сообщение для timkit Посмотреть профиль Найти все сообщения от timkit
 
Регистрация: 27.01.2012
Сообщений: 8

Хорошо, пусть будет такая структура (она лучше чем моя, потому что есть вложенность элементов), пусть по подобию вашего объекта я восстановлю исходное дерево, но у меня проблема в программном создании такой структуры по HTML. Намекните хотя бы в каком направлении двигаться.
В общем моя задача состоит в создании дерева и последующем его сохранении здесь
есть пример обратной задачи, т.е. считывание из объекта.
Ответить с цитированием
  #5 (permalink)  
Старый 16.12.2013, 12:04
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от timkit
Есть дерево
Откуда оно взялось? Кто-то же его посадил, верно? Дык может посадить сразу JSON-дерево, не?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 16.12.2013, 12:21
Новичок на форуме
Отправить личное сообщение для timkit Посмотреть профиль Найти все сообщения от timkit
 
Регистрация: 27.01.2012
Сообщений: 8

Сообщение от danik.js Посмотреть сообщение
Откуда оно взялось? Кто-то же его посадил, верно? Дык может посадить сразу JSON-дерево, не?
Ну спроси у головы на своем аватаре, откуда оно там взялось. Кстати смени его, а то примета плохая.
Ответить с цитированием
  #7 (permalink)  
Старый 16.12.2013, 15:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

timkit,

<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<ul id="tree">
    <li data-id="0">Автомобили
        <ul>
            <li data-id="1">Japan
                <ul>
                    <li data-id="2">Toyota
                        <ul>
                            <li data-id="3">Camry</li>
                            <li data-id="4">Avensis</li>
                        </ul>
                    </li>
                    <li data-id="5">Mazda</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
<script>
function h(b, c) {
       b = b.children;
       for (var d = b.length, a; a = b[--d];) "li" == a.tagName.toLowerCase() ? (c['li '+a.dataset.id] = {},
       c['li '+a.dataset.id][a.firstChild.data] = h(a, {})) : c.ul = h(a, {});
       return c
   };
var data = h(document.getElementById('tree'), {})
document.write(JSON.stringify(data))
</script>
</body>

</html>
Ответить с цитированием
  #8 (permalink)  
Старый 16.12.2013, 19:15
Новичок на форуме
Отправить личное сообщение для timkit Посмотреть профиль Найти все сообщения от timkit
 
Регистрация: 27.01.2012
Сообщений: 8

Большое спасибо Рони , буду дальше разбираться
Ответить с цитированием
  #9 (permalink)  
Старый 16.12.2013, 19:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

рони, ты из "благих намерений" обфусцируешь, дабы неповадно было на форум обращаться, или считаешь что код таким и должен быть?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 16.12.2013, 19:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

danik.js,
а вы из благих намерений всех гнобите, кто знает меньше вас, чтобы им
Сообщение от danik.js
дабы неповадно было на форум обращаться
или как?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
Сортировка JSON данных в цикле Fareastaz jQuery 12 15.03.2013 20:20
Проблемы с jqGrid и JSON massacra_panda Библиотеки/Тулкиты/Фреймворки 1 08.10.2012 16:44
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10