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

2015 年 3 月 11 日
 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。

6418 次点击
所在节点    iDev
17 条回复
chon
2015 年 3 月 11 日
好顶赞
newtonisaac
2015 年 3 月 11 日
加星
zenghaojim33
2015 年 3 月 11 日
先顶再看
Hysteria
2015 年 3 月 11 日
这种工具如果没问题确实有很大的帮助,赞楼主,先收藏了。
minglei
2015 年 3 月 11 日
Nice
sutar
2015 年 3 月 11 日
@Hysteria 所以得需要大家多多测试。。(保留字那里还没有完成。。
Hysteria
2015 年 3 月 11 日
@sutar 最近用不着= - =,用到问题果断告诉你。
Elethom
2015 年 3 月 11 日
Name 和 organization 可以通過標準 API 從系統獲取。
sutar
2015 年 3 月 11 日
@Elethom 了解了,thanks。
em91
2015 年 3 月 11 日
好顶赞
sutar
2015 年 3 月 12 日
@Elethom 我发现用 Python 的话只能得到 current uid。然后用 defaults read 没找到相应的信息。。而且 organization 其实取决于项目吧?望赐教。。
Elethom
2015 年 3 月 12 日
@sutar
import AddressBook
zenghaojim33
2015 年 3 月 12 日
你好,我用你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 年 3 月 12 日
@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 年 3 月 13 日
好东西, 这些写json串比较方便的转为objc对象了...
pheyer
2015 年 4 月 28 日
有用,点个赞,如果能有gui更好了
pheyer
2015 年 5 月 11 日

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

https://study.congcong.us/t/175968

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

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

© 2021 V2EX