Много ко многим отношениям в JSON - PullRequest
11 голосов
/ 02 сентября 2011

Рассмотрим следующий сценарий:

Вы хотите отправить некоторые данные клиенту в формате JSON и не хотите возвращаться на сервер.Данные состоят из 15 учителей и 100 учеников.Отношения между этими сущностями много-много (каждый ученик учит много учителей, и каждый учитель учит многих учеников).

В клиенте пользователю представлен список студентов.При щелчке любого ученика список его / ее учителей будет представлен пользователю, а по щелчку учителя - список всех учеников этого учителя.Это приводит к бесконечной навигации по клику от учеников к учителям и наоборот.

Теперь, как вы знаете, JSON представляет только отношение один-ко-многим в этой форме:

{ "s1" : [ "t1", "t2"], "s2" : [ "t2", "t4" ], "s3" : [ "t1", "t3", "t4"], ...}

У вас есть идеи, как это сделать?

Ответы [ 2 ]

13 голосов
/ 02 сентября 2011

Поскольку в JSON отсутствует концепция ссылок, вам не нужно беспокоиться о них. То, что определяет то, что считается отношением между учителями и учениками, лежит за пределами данных, т. Е. Является просто вопросом вашей интерпретации во время выполнения через идентификаторы сущностей.

var faculty = {
 "teachers": {
   "t1": ["s1","s2","s5"],
   "t2": ["s2","s7","s9"]
  },
 "students": {
   "s1": ["t1","t2"],
   "s2": ["t2","t7"]
  }
}

Например:

alert("Teacher t1's students are: " + faculty.teachers.t1.toString() );
alert("Student s2's teachers are: " + faculty.students.s2.toString() );
alert("Student s2's first teacher's students are: " + faculty.teachers[faculty.students.s2[0]].toString() );
5 голосов
/ 02 сентября 2011

Вы могли бы создать массив пар, описывающих отношения как ориентированный граф?

[// from , to
    ["s1", "t1"],
    ["s1", "t2"],
    ["s2", "t2"],
    ["s2", "t4"],
    ["t1", "s1"],
    ["t1", "s2"],
    ["t1", "s3"],
    ["t1", "s4"]
]

Это не будет кратким. Но это описало бы ваш набор данных.

...