嗨堆栈溢出的人
我正在编写一个通过REST与JSON连接到Web服务的iphone应用程序。 我想从我的Web服务提供的json模式生成目标c中的模型类,有点像wsdl2objc与asoap,xml和wsdl组合。
看起来这个主题没有多少
我尝试了http://code.google.com/p/bkjsonschema/中名为jsonschema2objc.rb的内容,但即使是最简单的json架构也会出现错误,这个架构位于http://en.wikipedia.org/wiki/JSON#Schema
我收到此错误:
使用临时文件/var/folders/rN/rNw33pkyHVeNG+-IesdU+k+++TI--Tmp-/jsonschema2objc.8WRkBSQo
!索引产品的对象定义具有未知类型
所以这是我的两个问题:
THX!
答案 0 :(得分:12)
Mac Appstore中有一个名为JSONModeler的非常好的工具(现在它已停止使用),但同样的人制作JSON Accelerator这是同一程序的演变。它真的很好(也很便宜)并且它生成了Objective-C,Java和Python代码(JSONModeler也支持Coredata类和模式,我不知道它们是否仍然支持它在新的中。)
答案 1 :(得分:3)
我是jsonschema2objc的开发者,它依赖于JSON模式的超集。也就是说,我们需要调整一点JSON模式来添加指定JSON和Obj-C之间映射的其他属性。例如,您可以在JSON和生成的Obj-C类中指定不同的属性名称。我们已经需要添加类型转换器和类型解析器的概念,这些概念是生成的解析代码所需要的,例如将原始字符串转换为日期(NSDate)对象,或者解析已解析对象的实际子类。我们支持包含作为给定类的子类的对象的一对多关系。在运行时,我们将使用模式中提供的其他元数据来确定要实例化的类。
我意识到我们在没有任何示例模式的情况下将此脚本放在那里以更好地理解如何使用它。我将在接下来的几天内解决这个问题......
与此同时,我建议您使用项目附带的TextMate包。我们支持许多TextMate片段,这些片段可自动处理创建有效模式的过程。
答案 2 :(得分:3)
这不是免费的,但也许Objectify会做你想要的吗?它看起来很光滑。
答案 3 :(得分:1)
https://github.com/BrunoAlexandreMendesMartins/CleverModels
给定某个URL,CleverModels会根据JSON响应为您发出请求并生成模型。
这是一个新工具和开源。
目标是支持多种语言。
答案 4 :(得分:1)
您可以尝试json2objc。我的一个朋友为自己开发了这个,并且在我的坚持之后他把它作为公共服务。这不是商业性的。
答案 5 :(得分:1)
查看Nidyx!它有JSON Schema到Obj-C模型支持(以CLI的形式,而不是网站),它可以吐出JSONModel
符合要求的类,并且它获得了Swift的支持,并且可能Java即将推出!
答案 6 :(得分:1)
我喜欢使用polymer 1.0。 这允许我将我的JSON粘贴到文本框中,插件生成类。
E:从xcode 8开始,插件不受官方支持'。 ESJsonFormat
答案 7 :(得分:1)
有一个名为" JSON Class Generator"的工具可用"从您在此编辑器中定义的类和枚举生成Objective-C源代码"。您也可以find it in the Mac App Store。
它没有jsonschema的导入功能,但确实根据你在gui中定义的内容生成了非常完整的模型。
也许您可以选择在编辑器中重新输入所有模型。如果你去图书馆,你肯定还有更多的工作要做。使用该应用程序,您可以从代码生成中获得所需的好处。 (我的个人原因是:工作量少,容易出错,运行时检查少,修改更容易,生成代码的功能更多)。
该应用程序是免费的。
由于不直接支持json模式:可能有创建转换器的选项。我检查了上面提到的App的文档文件格式。它也是JSON,它看起来很直接(类似于json架构)。因此转换器可以在一定程度上实现。但是我担心,问题在于细节 - 就像经常那样 - 并且我在一天之内写了一个转换器"变成一个"我正在写一个转换器,到目前为止花了我2个星期,我还没有完成"。这将是一个很酷的开源项目......
答案 8 :(得分:0)
如果找不到第三方工具,您可以接近以下想法。
JSON为您提供类似于加载plist的字典? 您可以实现包含字典的包装类并覆盖NSObject的两个方法:
-(BOOL) respondsToSelector:(SEL)selector
-(id) performSelector:(SEL)selector
如果选择器的名称在字典中,则它响应选择器,并且在执行选择器时它返回对象,如果该对象是字典,它将该字典包装在包装器类中并返回该字段。
现在这不会让你有好的类型信息,但是你可以像这样深入挖掘字典:
NSValue *universalGravity = (NSValue*) [[[jsonResponds settings] universal] gravity];
我在阅读您的问题时只是一个想法,并认为如果您找不到已经实施了您正在寻找的某些第三方,它可能是一个快速,足够好的解决方案。
答案 9 :(得分:0)
预写模型代码不是最灵活的解决方案。您可以拥有聪明的模型,尝试将传入的JSON转换为您定义的属性。看看JSONModel Obj-C框架。
它包含了大量的演示和测试,用它来编写模型非常容易:
答案 10 :(得分:0)
您可以使用此工具将json转换为obj c Object。
答案 11 :(得分:0)
您可以使用以下链接:
Convertor Link - 此实用程序生成一个Swift 2.0兼容模型,可以简单地拖动和放大。在您的项目中使用