Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 18:35   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Как в JSON выразить объект?

Имеется строковое дерево, его узлы могут быть либо ссылками, либо являться строкой (то есть лист дерева), либо не иметь ничего (как вариант являться строкой не содержащей символов). Например -
Код:
корень(
          узел1("строка1") 
          узел2() 
          узел3(узел4() узел5())
       )
Как его выразить в JSON?
Код:
{
   "корень": {
       "узел1": "строка1",
       "узел2": "",
       "узел3": {
             "узел4": "",
             "узел5": ""
                    }
                    }
}
Такая запись будет корректно отражать описанное выше дерево?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.06.2012 в 20:07.
Utkin вне форума Ответить с цитированием
Старый 14.06.2012, 22:55   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Да, можно так.

Но учтите, что время формирования подобного ответа растёт в геометрической прогрессии в зависимости от глубины. Если глубина предполагается большая, то советую использовать B-дерево.
Виталий Желтяков вне форума Ответить с цитированием
Старый 15.06.2012, 03:01   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Имеется строковое дерево, его узлы могут быть либо ссылками, либо являться строкой (то есть лист дерева), либо не иметь ничего (как вариант являться строкой не содержащей символов). Например -
Код:
корень(
          узел1("строка1") 
          узел2() 
          узел3(узел4() узел5())
       )
Как его выразить в JSON?
Код:
{
   "корень": {
       "узел1": "строка1",
       "узел2": "",
       "узел3": {
             "узел4": "",
             "узел5": ""
                    }
                    }
}
Такая запись будет корректно отражать описанное выше дерево?
Лучше определиться конкретно с назначением каждого из узлов. Узел это просто значение, или это список значений. Если то и другое, то можно оба значения выставить опциональными, что для строки вернет пустую строку, а для списка - пустой список. Тогда вид будет таким:
Код:
{
  "корень": {
      "узлы": [
          "узел1": {
              "строка": "строка1"
          },
          "узел2": {
              "узлы": [
                  "узел3": {
                       "строка": "строка3"
                   }
              ]
          }
      ]
  }
}
BOBAH13 вне форума Ответить с цитированием
Старый 15.06.2012, 16:07   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Узел это просто значение, или это список значений. Если то и другое, то можно оба значения выставить опциональными, что для строки вернет пустую строку, а для списка - пустой список
Модель для пользователей дерева уже описана выше. Но устроено следующим образом: узел имеет:
1) уникальный идентификатор
2) ссылку на родителя (-1 для корня)
3) список идентификаторов потомков
4) имя узла
5) строковое значение (которое является пустым, если имеется хоть один потомок)
Однако подчеркну еще раз пользователь дерева не может обращаться к потомкам узла по индексам списка - только по именам. Потомки не имеет отношения подчиненности друг к другу, их уникальные идентификаторы также не имеют никакой закономерности.
Само дерево предполагается использовать в большей степени для организации и хранения информации в иерархическом порядке, нежели для поиска заложенной в нем информации.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 15.06.2012 в 16:11.
Utkin вне форума Ответить с цитированием
Старый 15.06.2012, 18:07   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Модель для пользователей дерева уже описана выше. Но устроено следующим образом: узел имеет:
1) уникальный идентификатор
2) ссылку на родителя (-1 для корня)
3) список идентификаторов потомков
4) имя узла
5) строковое значение (которое является пустым, если имеется хоть один потомок)
Однако подчеркну еще раз пользователь дерева не может обращаться к потомкам узла по индексам списка - только по именам. Потомки не имеет отношения подчиненности друг к другу, их уникальные идентификаторы также не имеют никакой закономерности.
Само дерево предполагается использовать в большей степени для организации и хранения информации в иерархическом порядке, нежели для поиска заложенной в нем информации.
Прошу прощения, но если каждый узел имеет уникальный ид да еще и не имеет родителя, вам не напоминает это БД таблицу? А если к узлам будет доступ по имени, то я не понимаю зачем тут дерево.
Цитата:
5) строковое значение (которое является пустым, если имеется хоть один потомок)
Видимо я более перфекционизмом, но вот такого бы я не допустил. Советую пересмотреть объктную модель, т.к. для меня явно какая-то путаница с объектами и их назначением.
BOBAH13 вне форума Ответить с цитированием
Старый 15.06.2012, 21:12   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
А если к узлам будет доступ по имени, то я не понимаю зачем тут дерево.
Ну тут как бы объяснить правильно и в двух словах. Имена могут повторяться. Например с/windows/temp и d/root/temp. Естественно в рамках одного родителя все потомки имеют уникальные имена, но также к примеру родитель и потомок могут иметь одинаковые имена например: корень/узел/узел/узел/корень/корень и т.д.
Цитата:
но если каждый узел имеет уникальный ид да еще и не имеет родителя
По модели родитель имеется (см пункт 2), однако фактически это только поле, указывающее идентификатор родителя - так удобно для организации операций (например перенос части дерева).
Цитата:
вам не напоминает это БД таблицу?
Можно и так сказать, просто другая точка зрения на устройство модели.

Цитата:
Советую пересмотреть объктную модель, т.к. для меня явно какая-то путаница с объектами и их назначением.
Там все просто . Фактически модель уже описана выше. Речь же идет о внутреннем устройстве, чтобы не париться с созданием/добавлением строк, отслеживанием их существования и пр., просто строки есть всегда. Но если есть хоть один потомок то для пользователя дерева считается, что строкового значения нет. Таким образом строками имитируется конечный лист дерева.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 15.06.2012 в 21:27.
Utkin вне форума Ответить с цитированием
Старый 16.06.2012, 00:01   #7
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Модель для пользователей дерева уже описана выше. Но устроено следующим образом: узел имеет:
1) уникальный идентификатор
2) ссылку на родителя (-1 для корня)
3) список идентификаторов потомков
4) имя узла
5) строковое значение (которое является пустым, если имеется хоть один потомок)
Это B-дерево. Поищите алгоритмы его обработки и в путь.
Виталий Желтяков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Незнаю как выразить проблему! Коринф Microsoft Office Excel 4 11.12.2011 01:05
как из ячейки с датой выразить день, месяц, год мария2507 Microsoft Office Excel 3 23.03.2010 15:10
выразить arcctg(x) через другие функции? KimiRaikkonen Общие вопросы C/C++ 2 20.11.2009 21:17
ребята , таки так, помогите выразить R, а то Я не знаю как! dvuser10 Свободное общение 1 09.07.2009 14:31
Подскажите пожалуйста, как выразить x в степени n? Dimanw92 Паскаль, Turbo Pascal, PascalABC.NET 6 03.10.2008 10:47