Схема из вложенного списка JSON

У меня есть список JSON, который фиксирует отношения от одного до многих.

Например, школа может иметь несколько объектов класса, а класс может иметь несколько объектов ученика, но ученик принадлежит только к одному классу и одной школе:

{
  "School": [ {
    "id": 1,
    "name": "Grad School",
    "Class": [ {
         "name": 101,
         "Student": [ {
              "name": 501,
              "propertyA": "test"
         }]
     }]
  }]
}

Я пытаюсь преобразовать этот пример JSON в подходящую схему, но вложение вызывает проблемы. Кажется, что Аполлон может помочь, но приведенный ниже пример не очень информативен: https://launchpad.graphql.com/4nqqqmr19

Я ищу предложения о том, как справиться с этой ситуацией, будь то преобразователь схемы JSON (который обрабатывает вложенные ситуации) или что-то еще.

Правильно ли я понимаю, что у вас есть источник данных JSON, а у вас нет доступа к БД?

Roland Studer 21.05.2018 10:52

Надеюсь, мой ответ указал вам направление.

Roland Studer 21.05.2018 11:35
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
2
711
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что ваша проблема на самом деле не в схеме, которая мне кажется простой:

У вас есть эти типы (весь фиктивный код, поскольку вы не указали, на каком языке / фреймворке вы хотите предоставить GraphQL-Api):

SchoolType
  id ID
  name String
  classes [Class]
  students [Students]

ClassType
  id ID
  name String
  school School
  students [Student]

StudentType
  id ID
  name String
  class Class
  school School

Тогда нам понадобится точка входа

classQueryType
  name "school"
  argument :id, ID
  resolve do
    schools.where(id: argument["id"])

Итак, у нас есть схема. Большая работа, вероятно, состоит в том, чтобы получить доступ к схеме JSON для разных типов таким образом, чтобы работали указанные выше типы.

Итак, допустим, мы каким-то образом читаем данные JSON с той структурой, которая у вас есть.

 const DATA = JSON.parse("your-example.json")

Нам нужно преобразовать это в разные коллекции объектов, чтобы мы могли запрашивать их динамически:

 schools = []
 classes =  []
 people = []

  def build_schools(data)
    data.schools.for_each do |school|
       schools.push(
         name: school.name, 
         id: school.id, 
         classes: build_classes(school)
       )
    end
 end

 def build_classes(school)
   ids = []
   school.classes.for_each do  |class|
     ids.push(class.id)
     classes.push(
       id: class.id
       name: class.name
       school_id: school.id # you create your own references, to associate these objects
       students: build_students(class)
     )
   end
   return ids
 end

 ...

Но тогда вам все равно нужно подключить это к вашей системе типов. Что означает написать свои резолверы:

Например, для StudentType

StudentType
 id ID
 name String
 class Class
 school School
   resolve(object) ->
     school_id = students.where(id: object.id).class_id.school_id
     schools.where(id: school_id)

Ах, спасибо за подробности. У меня есть часть коллекции объектов уже в Neo4J, это была часть преобразователя, которую я не мог понять.

Shawn 22.05.2018 13:05

Мой рабочий процесс, который я планирую использовать, - это Neo4J -> GraphQL / Apollo -> React. Правильно ли я говорю, что предоставленный вами метод распознавателя можно использовать на панели запуска Apollo?

Shawn 22.05.2018 13:17

Другие вопросы по теме