Создать классы ruby ​​из документа json - PullRequest
2 голосов
/ 17 августа 2010

Используя ruby ​​json API, я хочу сэкономить некоторую работу и сгенерировать объекты ruby.Любой способ сделать это?

, чтобы вы могли преобразовать это:

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

в это:

class Menu
  attr_accessor :id
  attr_accessor :file
  attr_accessor :popup
end

Ответы [ 4 ]

3 голосов
/ 17 августа 2010

Если вы хотите превратить строку JSON в Ruby Hash, вы можете сделать

my_hash = JSON.parse('{"foo":"bar"}')
puts my_hash['foo']
2 голосов
/ 18 ноября 2013

Для этого есть замечательная жемчужина. https://github.com/apotonick/representable/

Вот как бы выглядел ваш представитель

module MenuRepresenter
  include Representable::JSON

  property :id
  property :value
  property :popup
end

Создайте свою модель

class Menu
  attr_accessor :id, :value, :popup
end

menu = Menu.new.extend(MenuRepresenter).from_json(json)

# You can convert it back into json via .to_json
# expect(menu.to_json).to eq(json)

В приведенном выше примере показана только базовая реализация, вам нужно создать еще один класс для пункта меню, для получения более подробной информации обратитесь к документации репозитория github.

1 голос
/ 17 августа 2010

Я думаю, вы немного смущены.В вопросе вы спрашиваете, как превратить документ JSON в классы.В комментариях вы говорите, что вам нужна JSON-версия инструмента RXSD XML, который, однако, превращает XML схемы в классы Ruby.

Превращение документов JSON в классы на самом деле не имеет смысла,Если вы сравните мир разметки документов с программированием, документы соответствуют объектам, а схемы соответствуют классам (на самом деле, типам, на самом деле, но поскольку мы говорим о Ruby, давайте не будем открывать этот червь и придерживаться классов).

Итак, имеет смысл генерировать объекты Ruby из документов JSON и имеет смысл генерировать классы Ruby из схем JSON, но не имеет смысла генерировать классы Ruby из документов JSON.Плохая новость заключается в том, что для того, чтобы иметь возможность автоматически генерировать классы Ruby из схемы JSON, необходимо, чтобы схема работала в автоматически обрабатываемом (машиночитаемом) формате.

К сожалению, не существует такой вещи, как JSON-схема , и, следовательно, JSON-схемы, как правило, не являются машиночитаемыми, а представляют собой просто всплеск ориентированного на человека английского текста в документации API.страница провайдера веб-услуг.Если повезет.Чаще всего нет никакой документации о схеме JSON .

Таким образом, поскольку не существует стандартизированного способа описания схем JSON, не может быть стандартизированного инструмента для обработки JSON.схемы.В отличие от XML, где существует ограниченное количество стандартизированных схем (DTD, XSD, RelaxNG).

Обратите внимание, что то, что я написал выше, не совсем верно: существуют спецификации для схем JSON (например, JSON-Schema ), и есть их реализации Ruby (например, Ruby / JSONSchema , только проверка, не генерирует классы), но никто не использует их, поэтому они могут простоа не существует.

1 голос
/ 17 августа 2010

Если вам нужны «методизированные» хэши, которые используют методы доступа (совсем неплохо!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...