1. 程式人生 > >ZZMonster一個方法自動生成Model(相容YYModel)

ZZMonster一個方法自動生成Model(相容YYModel)

# ZZMonster(相容YYModel)

純程式碼編寫,無需安裝任何外掛,一個方法輕鬆搞定複雜Json轉Model。(相容[YYModel](https://github.com/ibireme/YYModel))

### 示例:

### 1.下載[ZZMonster](https://github.com/zhangs3721/ZZMonster)並匯入專案中。ZZMonster目錄:

![ZZMonster目錄](https://upload-images.jianshu.io/upload_images/5173163-5e81d033c36d52cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 2.匯入標頭檔案 `#import "ZZWriter.h"`,呼叫此方法:

```objectivec

/*  呼叫方法

 *  FileName: 檔名

 *  ExtensionClassName: 為預防自動生成的類名重複。例Authors類後加字尾->AuthorsClass,不會汙染資料。

 *  Json: 請求到的json,預設是(NSDictionary *)json。

 *  URL: 生成檔案存放的路徑。

 *  error: 生成檔案發生錯誤

 */

+ (void)writeClassObjectsWithFileName:(NSString *)fileName withExtensionClassName:(NSString *)extensionName  withJson:(NSDictionary *)json toFileURL:(NSURL *)url error:(NSError **)error;

```

如圖:

![呼叫主方法](https://upload-images.jianshu.io/upload_images/5173163-413ef5aa4ba27598.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 3.匯入生成好的model檔案:

![匯入生成好的model檔案](https://upload-images.jianshu.io/upload_images/5173163-0364861d3c9bc845.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 4.引用.h `#import "BaseModel.h"`後,使用YYModel。

![引用.h `#import "BaseModel.h"`後,使用YYModel](https://upload-images.jianshu.io/upload_images/5173163-2ec79e2304084259.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 附:複雜json自動生成概要:

### 1.json示例:

```json

{

    "author" : {

        "bools" : true,

        "author" : {

            "author" : "zzz",

            "authors" : {

                "author" : 19.1

            }

        }

    },

    "pages" : 256,

    "book_name" : "Harry Potter",

    "book_info" : [

        {

            "one" : "this is one day"

        },

        {

            "one" : 10,

            "id" : "this is id"

        },

    ]

}

```

生成model圖:

![生成model圖](https://upload-images.jianshu.io/upload_images/5173163-f81d1de1e64b9a1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**注:** 示例的json中,有幾點特殊。

* 1.重複的key值`author `。

* 2.特殊key值`id`。

* 3.陣列`book_info`中的key值`one`的型別不同。

* 4.類名字尾`+Class`。

處理方法:

* 1.重複的key值生成的類名,從第二個類起,類名前加一個`Z`。

* 2.屬性名是系統保留字的,全部大寫,因為大寫不影響智慧提示。

* 3.如果陣列中相同層級的key值型別不同,統一轉化為字串。

* 4.專案不同.h檔案中類名相同會引發報錯,類名並不會汙染資料,建議加上類名字尾。(隨機字串也可以)