Json для создания объектных c-классов
Привет, люди с переполнением стека
Я пишу приложение iphone, которое подключается к веб-сервису через REST с помощью JSON.
Я хотел бы сгенерировать классы модели в объекте c из json-схемы, предоставленной моей веб-службой, немного похожей на iw do с wsdl2objc с помощью комбинации asoap, xml и wsdl.
Похоже, там не так много на эту тему
Я попробовал что-то под названием jsonschema2objc.rb из http://code.google.com/p/bkjsonschema/, но он дал мне ошибки даже на простейшей схеме json, найденной здесь: http://en.wikipedia.org/wiki/JSON#Schema
я получаю эту ошибку:
Использование временного файла /var/folders/rN/rNw 33pkyHVeNG+-IesdU+k+++TI/-Tmp-/jsonschema2objc.8WRkBSQo
!!! Определение объекта в индексе Продукт имеет неизвестный тип
так вот мои 2 вопроса:
- Вы, ребята, знаете какой-либо хороший инструмент для достижения jsonchema = > объективных классов c?
- Знаете ли вы, что эта ошибка означает в моем. /jsonschema 2objc.rb
спасибо!
Ответы
Ответ 1
В Mac App Store был очень хороший инструмент под названием JSONModeler (теперь он прекращен), но те же ребята делают JSON Accelerator, который эволюция одной и той же программы. Это действительно хорошо (и дешево), и он генерирует Objective-C, Java и код Python (JSONModeler также поддерживает классы и схему Coredata, я не знаю, поддерживают ли они его в новой версии).
Ответ 2
Я разработчик jsonschema2objc, он опирается на надмножество схемы JSON. То есть нам нужно было настроить небольшую схему JSON, чтобы добавить дополнительные свойства, которые определяют сопоставление между JSON и Obj-C. Например, вы можете указать другое имя свойства в JSON и сгенерированный класс Obj-C. Нам уже необходимо было добавить понятие преобразователей типов и типов, которые необходимы для генерируемого кода синтаксического анализа для преобразования исходных строк в даты (NSDate) или, например, для разрешения фактического подкласса анализируемого объекта. Мы поддерживаем отношения "один ко многим", содержащие объекты, которые являются подклассами данного класса. Во время выполнения мы будем использовать дополнительные метаданные, представленные в схеме, чтобы выяснить, какой класс должен инициализировать.
Я понимаю, что мы помещаем этот script в него без каких-либо схем выборок, чтобы лучше понять, как его использовать. Я разрешу это в ближайшие несколько дней...
Тем временем я рекомендую вам использовать пакет TextMate, который поставляется вместе с проектом. Мы поддерживаем десятки фрагментов TextMate, которые автоматизируют процесс создания правильной схемы.
Ответ 3
Это не бесплатно, но, возможно, Objectify будет делать то, что вы хотите? Кажется очень гладким.
Ответ 4
https://github.com/BrunoAlexandreMendesMartins/CleverModels
Учитывая определенный URL, CleverModels сделает запрос для вас и сгенерирует модели в соответствии с ответом JSON.
Это новый инструмент и с открытым исходным кодом.
Цель состоит в поддержке нескольких языков.
Ответ 5
Вы можете попробовать json2objc. Один из моих друзей разработал это для себя, и после того, как я настаивал, он сделал это публичной службой. Это не коммерческий.
Ответ 6
Отъезд Nidyx! Он получил JSON Schema для поддержки модели Obj-C (в виде CLI, а не веб-сайта), он может выплеснуть JSONModel
соответствующие классы и получить поддержку Swift и, возможно, Java в ближайшее время!
Ответ 7
Мне нравится использовать ESJsonFormat. Это позволяет мне вставить мой JSON в текстовое поле, и плагин создает классы.
E: с xcode 8 плагины не "официально поддерживаются". Посмотреть здесь
Ответ 8
Доступен инструмент под названием " Генератор классов JSON ", который "генерирует исходный код Objective C из классов и перечислений, которые вы определили в этом редакторе". Также вы можете найти его в Mac App Store.
Он НЕ имеет функции импорта для jsonschema, но генерирует довольно полные модели из того, что вы определили в графическом интерфейсе.
Может быть, это вариант для вас, чтобы повторно ввести все модели в редакторе. Если вы идете за библиотекой, у вас наверняка будет больше работы. Используя приложение, вы можете получить преимущества, которые вы хотите от генерации кода. (моими личными причинами было бы: меньше работы, меньше ошибок, меньше проверок во время выполнения, более легкая модификация, больше возможностей сгенерированного кода).
Приложение на веб-сайте является пробной версией, поэтому вы можете загрузить его, использовать для своих целей и не платить ничего за ваш код - только если вы хотите изменить код после истечения срока действия пробной версии.
Поскольку схема json напрямую не поддерживается: возможно, существует возможность создать конвертер. Я проверил формат файла документа вышеупомянутого приложения. Это также JSON, и это выглядит прямо (похоже на схему json). Таким образом, конвертер может быть в определенной степени возможен. Но я боюсь, что проблема заключается в деталях, как это часто бывает, и что "я пишу конвертер за день" становится "я пишу конвертер, мне потребовалось 2 недели, и я все еще не закончил" ". Это был бы крутой проект с открытым исходным кодом, чтобы начать...
Ответ 9
Если вы не можете найти сторонний инструмент, вы можете приблизиться к идее ниже.
JSON возвращает вам словарь, похожий на загрузку plist?
Вы можете реализовать класс-оболочку, содержащий словарь, и переопределяет два метода NSObject:
-(BOOL) respondsToSelector:(SEL)selector
-(id) performSelector:(SEL)selector
Если имя селектора находится в словаре, оно отвечает на селектор, и при выполнении селектора он возвращает объект, если этот объект является словарем, он переносит этот словарь в класс обертки и возвращает его.
Теперь это не позволит вам иметь хорошую информацию о типе, но вы сможете развернуть словарь следующим образом:
NSValue *universalGravity = (NSValue*) [[[jsonResponds settings] universal] gravity];
Просто идея, которую я прочитал при чтении вашего вопроса, и подумал, что это может быть быстрое, достаточно хорошее решение, если вы не можете найти стороннюю компанию, которая уже реализовала то, что вы ищете.
Ответ 10
Предварительный код модели не является самым гибким решением. У вас могут быть умные модели, которые пытаются конвертировать ваш входящий JSON в ваши определенные свойства. Взгляните на структуру JSONModel Obj-C.
В нем много демонстраций и тестов, и очень легко написать модели с ним:
https://github.com/icanzilb/JSONModel
Ответ 11
hi вы можете использовать этот инструмент, чтобы получить json для объекта Object.
http://www.realmgenerator.eu/
Ответ 12
Вы можете использовать ссылку ниже:
Convertor Link - Эта утилита создает Swift 2.0 совместимые модели, которые можно просто перетаскивать и использовать в вашем проекте