JSON2Mantle:用 JSON 文件生成 Mantle model 的小工具

2015-03-11 07:59:47 +08:00
 sutar

Mantle 是一个构建 model 层的库。然而通过 Mantle 偷懒的同时,还是得自己把 JSON 里的字段写成 Objective-C 文件。为了进一步偷懒,我写了一个 Python 小工具:输入 xxx.json 自动生成相应的 Mantle model 文件。

先放地址:https://github.com/sutar/JSON2Mantle

安装:

$ sudo pip install JSON2Mantle

Features

自动转换 property 名称

(半)自动类型映射

目前能处理 NSInteger, NSString, BOOL 等基本类型。下一步可能会对 NSURL 等类型进行检测。

支持多级 JSON 字典 (nested)

例如如下的user数据:

{
  "id": 10,
  "name": "Clementina DuBuque",
  "username": "Moriah.Stanton",
  "email": "Rey.Padberg@karina.biz",
  "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 GeoModelCompanyModel 四个 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。

5682 次点击
所在节点    iDev
17 条回复
chon
2015-03-11 10:21:35 +08:00
好顶赞
newtonisaac
2015-03-11 11:28:56 +08:00
加星
zenghaojim33
2015-03-11 12:08:12 +08:00
先顶再看
Hysteria
2015-03-11 13:11:44 +08:00
这种工具如果没问题确实有很大的帮助,赞楼主,先收藏了。
minglei
2015-03-11 15:57:12 +08:00
Nice
sutar
2015-03-11 16:24:09 +08:00
@Hysteria 所以得需要大家多多测试。。(保留字那里还没有完成。。
Hysteria
2015-03-11 18:34:10 +08:00
@sutar 最近用不着= - =,用到问题果断告诉你。
Elethom
2015-03-11 19:22:45 +08:00
Name 和 organization 可以通過標準 API 從系統獲取。
sutar
2015-03-11 19:38:43 +08:00
@Elethom 了解了,thanks。
em91
2015-03-11 20:42:46 +08:00
好顶赞
sutar
2015-03-12 06:20:53 +08:00
@Elethom 我发现用 Python 的话只能得到 current uid。然后用 defaults read 没找到相应的信息。。而且 organization 其实取决于项目吧?望赐教。。
Elethom
2015-03-12 06:40:29 +08:00
@sutar
import AddressBook
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
sutar
2015-03-12 16:29:29 +08:00
@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 。
richardhc
2015-03-13 08:35:29 +08:00
好东西, 这些写json串比较方便的转为objc对象了...
pheyer
2015-04-28 19:37:32 +08:00
有用,点个赞,如果能有gui更好了
pheyer
2015-05-11 09:58:43 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/175968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX