
Mantle 是一个构建 model 层的库。然而通过 Mantle 偷懒的同时,还是得自己把 JSON 里的字段写成 Objective-C 文件。为了进一步偷懒,我写了一个 Python 小工具:输入 xxx.json 自动生成相应的 Mantle model 文件。
先放地址:https://github.com/sutar/JSON2Mantle
安装:
$ sudo pip install JSON2Mantle var_name 自动转换成 varName。id 会转换成 modelId。目前能处理 NSInteger, NSString, BOOL 等基本类型。下一步可能会对 NSURL 等类型进行检测。
例如如下的user数据:
{ "id": 10, "name": "Clementina DuBuque", "username": "Moriah.Stanton", "email": "[email protected]", "address": { "street": "Kattie Turnpike", "suite_number": "Suite 198", "city": "Lebsackbury", "zipcode": "31428-2261", "geo": { "lat": "-38.2386", "lng": "57.2232" } }, "cell_phone": "024-648-3804", "website": "ambrose.net", "company": { "name": "Hoeger LLC", "catch_phrase": "Centralized empowering task-force", "bs": "target end-to-end models" } } 只要一次执行,就能生成UserModel AddressModel GeoModel 和 CompanyModel 四个 models。
产生的UserModel.h文件如下:
#import <Mantle.h> #import "AddressModel.h" #import "CompanyModel.h" @interface UserModel : MTLModel <MTLJSONSerializing> @property (nonatomic, copy) NSString *username; @property (nonatomic, copy) NSString *website; @property (nonatomic, copy) NSString *email; @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) NSInteger modelId; @property (nonatomic, strong) AddressModel *address; @property (nonatomic, strong) CompanyModel *company; @property (nonatomic, copy) NSString *cellPhone; @end 只要执行一句:
$ json2mantle user.json output OK。介绍完毕,再放下地址: https://github.com/sutar/JSON2Mantle
欢迎 star。
1 chon 2015-03-11 10:21:35 +08:00 好顶赞 |
2 newtonisaac 2015-03-11 11:28:56 +08:00 加星 |
3 zenghaojim33 2015-03-11 12:08:12 +08:00 先顶再看 |
4 Hysteria 2015-03-11 13:11:44 +08:00 这种工具如果没问题确实有很大的帮助,赞楼主,先收藏了。 |
5 minglei 2015-03-11 15:57:12 +08:00 Nice |
8 Elethom 2015-03-11 19:22:45 +08:00 via iPhone Name 和 organization 可以通 API 系取。 |
10 em91 2015-03-11 20:42:46 +08:00 好顶赞 |
11 sutar OP @Elethom 我发现用 Python 的话只能得到 current uid。然后用 defaults read 没找到相应的信息。。而且 organization 其实取决于项目吧?望赐教。。 |
13 zenghaojim33 2015-03-12 12:03:16 +08:00 你好,我用你tests目录下的top10.json做测试报错了,请问正确的使用姿势是什么 haodeiMac:tests pro$ json2mantle json2mantle top10.json class --prefix XYZ --author "John Smith" Traceback (most recent call last): File "/usr/local/bin/json2mantle", line 9, in <module> load_entry_point('JSON2Mantle==0.0.6', 'console_scripts', 'json2mantle')() File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 357, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2394, in load_entry_point return ep.load() File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2108, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) ImportError: No module named json2mantle.cli |
14 sutar OP @Elethom 原来如此,学习了。。 _(-ω-J∠)_ @zenghaojim33 看起来像是没装好的样子,请检查: 1)在 Python 中输入 import site; site.getsitepackages() 查看 site-packages 路径; 2)并检查几个路径下是否有 json2mantle 文件夹。 我在的系统里(OS X 10.10.2),位于 /Library/Python/2.7/site-packages/json2Mantle 。 |
15 richardhc 2015-03-13 08:35:29 +08:00 好东西, 这些写json串比较方便的转为objc对象了... |
16 pheyer 2015-04-28 19:37:32 +08:00 有用,点个赞,如果能有gui更好了 |
17 pheyer 2015-05-11 09:58:43 +08:00 其实已经有一个GUI版本的工具了: https://github.com/Ahmed-Ali/JSONExport,swift编写的,好像只能在Xcode6.3下编译吧。 |