Skip to content

Commit 107ebcc

Browse files
author
Sven
committed
update: 添加实例工程、 更新 README, 支持多层 json 解析
1 parent 089a864 commit 107ebcc

File tree

16 files changed

+954
-86
lines changed

16 files changed

+954
-86
lines changed

README.md

Lines changed: 110 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
SwiftJSONModeler是一个Xcode插件,可以将json 转为Swfit模型
1+
SwiftJSONModeler是一个Xcode插件,一键转换json字符串Swfit模型,一键转化 YApi 平台接口为模型,并且自动引入注释。
22
* 支持struct, class
3-
* 支持单json转模
4-
* 支持YApi RAW或接口id解析转模,并且自动添加注释
3+
* 支持单json转模, 多层嵌套 json
4+
* 支持YApi RAW或接口id解析转模,并且自动引入 YApi 平台注释和兼容数据类型
55
* 支持自定义遵循 和 import
66
* 支持自定义模型前缀和后缀
7-
* 可设置是否类型可选,是否使用显示可选`?`(不使用则为隐式可选`!`)
8-
* YApi RWA支持按照路径解析模型,自动解析子类型
7+
* 可设置隐式和显示可选类型,默认显示可选`?`(不使用则为隐式可选`!`)
8+
* YApi 支持按照自定义路径解析模型,自动解析子类型
99

10-
## 效果图
1110

12-
### 标准json 解析
11+
## json 转Swfit模型
1312

1413
复制单json, 一步转为模型。
1514

@@ -18,7 +17,79 @@ SwiftJSONModeler是一个Xcode插件,可以将json 转为Swfit模型
1817

1918
如果无法预览查看[传输门](https://github.com/yumengqing/SwiftJSONModeler/blob/master/Sources/example.gif)或者[Sources/example.gif](./Sources/example.gif)
2019

21-
### YApi RAW解析
20+
示例 json 数据:
21+
```javaScript
22+
{
23+
"title": "第一层 json",
24+
"stringValue": "字符串值",
25+
"intValue": 58,
26+
"doubleValue": 18.2,
27+
"nullValue": null,
28+
"boolValue": true,
29+
"subJson": {
30+
"title": "第二层 json",
31+
"stringValue": "字符串值"
32+
},
33+
"arrayValue1": [
34+
"value1",
35+
"value2",
36+
"value3"
37+
],
38+
"arrayValue2": [{
39+
"title": "数组包含子 json",
40+
"intValue": 12,
41+
"boolValue": false
42+
}]
43+
}
44+
```
45+
Swift模型
46+
```swift
47+
///
48+
struct HKModel: HandyJSON {
49+
50+
var arrayValue2: [HKArrayValue2Model] = []
51+
52+
var nullValue: NSNull?
53+
54+
var intValue: Int?
55+
56+
var arrayValue1: [String] = []
57+
58+
var title: String?
59+
60+
var stringValue: String?
61+
///
62+
var subJson: HKSubJsonModel?
63+
64+
var doubleValue: Double?
65+
66+
var boolValue: Int?
67+
}
68+
69+
///
70+
struct HKArrayValue2Model: HandyJSON {
71+
72+
var title: String?
73+
74+
var boolValue: Int?
75+
76+
var intValue: Int?
77+
}
78+
79+
///
80+
struct HKSubJsonModel: HandyJSON {
81+
82+
var title: String?
83+
84+
var stringValue: String?
85+
}
86+
87+
```
88+
支持多层嵌套 josn, 高亮提示 json 中 `null`类型, 类型自动判断。
89+
90+
## YApi 接口平台转模支持
91+
92+
什么是 YApi,YApi 是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台,[github 地址](https://github.com/YMFE/yapi)
2293

2394
复制YApi接口RAW数据,一步解析带有注释的模型。
2495
解析效果如下():
@@ -27,6 +98,37 @@ SwiftJSONModeler是一个Xcode插件,可以将json 转为Swfit模型
2798

2899
如果无法预览查看[Source/YApiRAW.gif](./Sources/YApiRAW.gif)
29100

101+
如果你使用YApi接口平台,我们支持两种方式,通过接口 Id)和 Raw 数据转模。一键转为模型,并且自动根据YApi为模型引入注释。
102+
103+
### 通过Id转模
104+
105+
在配置了项目token和host基础下,简单复制Id即可实现转模和添加注释.
106+
107+
**如何查看YApi接口中的id?**在YApi对应的接口中,查看浏览器网址,最后的数字就是Id。如下图:
108+
109+
![接口Id](./Sources/yapiHostId.png)
110+
111+
具体配置参考下面设置部分。
112+
113+
### RAW数据
114+
115+
**RAW数据**:即YApi接口平台提供的带有接口字段及注释的json数据,查看方式:选择接口 -> 编辑 -> 返回数据设置 -> RAW 如下图
116+
117+
![Alt](./Sources/YApiRAWData.png)
118+
119+
示例RAW数据:
120+
121+
```javascript
122+
{"type":"object","title":"empty object","properties":{"message":{"type":"string"},"code":{"type":"string"},"response":{"type":"object","properties":{"teachers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","mock":{"mock":"Mrs Yang"},"description":"名字"},"subject":{"type":"string","mock":{"mock":"语文"},"description":"科目"},"phone":{"type":"string","mock":{"mock":"13459923098"},"description":"联系电话"}},"required":["name","subject","phone"]},"description":"老师"},"name":{"type":"string","description":"姓名"},"age":{"type":"integer","mock":{"mock":"18"},"description":"年龄"},"score":{"type":"number","mock":{"mock":"89.8"},"description":"综合成绩"},"likes":{"type":"array","items":{"type":"string","mock":{"mock":"英雄联盟"}},"description":"爱好"},"emergercyContact":{"type":"object","properties":{"name":{"type":"string"},"phone":{"type":"string","description":"联系电话"},"address":{"type":"string","description":"联系地址","mock":{"mock":"xx街道xx栋xx单元"}}},"description":"紧急联系人","required":["name","phone","address"]},"isBoy":{"type":"boolean","description":"是否为男孩"}},"required":["teachers","name","age","score","likes","emergercyContact","isBoy"]}},"required":["message","code","response"]}
123+
```
124+
125+
> 完整示例可下载打开SwiftJSONModelerDemo查看
126+
127+
### 解析指定路径模型
128+
129+
如果你数据有多层json, 可以在设置中指定解析路线path来获取指定模型。比如我的目标数据在response字段下,则可以配置path为`response`.则直接解析response下的json模型。多路径使用 `.`
130+
131+
30132
## 安装
31133
1.你可以选择[Release](https://github.com/yumengqing/SwiftJSONModeler/releases) 直接下载应用安装
32134

@@ -71,82 +173,4 @@ SwiftJSONModeler提供多种自定义可选设置,可通过插件的Config选
71173
![](./Sources/keybinding.png)
72174

73175
记得双击key下面那个区域才可以编辑,这里我使用的是alt + s 和alt + c 避免与系统的冲突
74-
## 标准JSON转模
75-
76-
复制需要转换的json,选择插件的Struct JSON或者Class JSON功能,即可生成相应Swift模型。
77-
注意:目前只支持单层json
78-
79-
示例json
80-
81-
```javascript
82-
{
83-
"orderName": "擦护理洗车",
84-
"decription": "退还到原支付账户",
85-
"refund": 58,
86-
"total": 18.2,
87-
"name": null,
88-
"detail": {
89-
"id": 1387329,
90-
"date": "2018-08-08"
91-
},
92-
"tag": [
93-
"美容洗车",
94-
"活动",
95-
"护理"
96-
]
97-
}
98-
```
99-
100-
转模结果
101-
102-
```swift
103-
struct <#Model#>: HandyJSON {
104-
var name: <#NSNull#>? // 字典为null 需要手动指定类型
105-
var decription: String?
106-
var orderName: String?
107-
var refund: Int?
108-
var tag: [String]? // 自动识别数组(如果是基本类型)
109-
var detail: <#SubModel#>? // 需要再次转子json 模型
110-
var total: Double?
111-
}
112-
```
113-
114-
![效果图](./Sources/result.png)
115-
116-
## YApi 接口平台转模
117-
118-
如果你使用YApi接口平台,可以通过复制接口返回的 RAW数据,或者复制Id,自动转为模型,并且自动根据YApi为模型添加注释。
119-
120-
### 通过Id转模
121-
122-
在配置了项目token和host基础下,简单复制Id即可实现转模和添加注释.
123-
124-
**如何查看YApi接口中的id?**在YApi对应的接口中,查看浏览器网址,最后的数字就是Id。如下图:
125-
126-
![接口Id](./Sources/yapiHostId.png)
127-
128-
129-
130-
### RAW数据
131-
132-
**RAW数据**:即YApi接口平台提供的带有接口字段及注释的json数据,查看方式:选择接口 -> 编辑 -> 返回数据设置 -> RAW 如下图
133-
134-
![Alt](./Sources/YApiRAWData.png)
135-
136-
示例RAW数据:
137-
138-
```javascript
139-
{"type":"object","title":"empty object","properties":{"message":{"type":"string"},"code":{"type":"string"},"response":{"type":"object","properties":{"teachers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","mock":{"mock":"Mrs Yang"},"description":"名字"},"subject":{"type":"string","mock":{"mock":"语文"},"description":"科目"},"phone":{"type":"string","mock":{"mock":"13459923098"},"description":"联系电话"}},"required":["name","subject","phone"]},"description":"老师"},"name":{"type":"string","description":"姓名"},"age":{"type":"integer","mock":{"mock":"18"},"description":"年龄"},"score":{"type":"number","mock":{"mock":"89.8"},"description":"综合成绩"},"likes":{"type":"array","items":{"type":"string","mock":{"mock":"英雄联盟"}},"description":"爱好"},"emergercyContact":{"type":"object","properties":{"name":{"type":"string"},"phone":{"type":"string","description":"联系电话"},"address":{"type":"string","description":"联系地址","mock":{"mock":"xx街道xx栋xx单元"}}},"description":"紧急联系人","required":["name","phone","address"]},"isBoy":{"type":"boolean","description":"是否为男孩"}},"required":["teachers","name","age","score","likes","emergercyContact","isBoy"]}},"required":["message","code","response"]}
140-
```
141-
142-
> 完整示例可下载打开SwiftJSONModelerDemo查看
143-
144-
### 解析指定路径模型
145-
146-
如果你数据有多层json, 可以在设置中指定解析路线path来获取指定模型。比如我的目标数据在response字段下,则可以配置path为response.则直接解析response下的json模型。多路径使用 `.`
147-
148-
149-
150-
## 待优化
151176

152-
* 直接解析出子json 或者 数组内子json

Sources/example.gif

-11 MB
Loading

0 commit comments

Comments
 (0)