将jsonModel转化为文件

简介:

将jsonModel转化为文件

这个类是我自己写着用的,用于将字典文件直接转换成Model的文件,省去你写无数Model中属性的代码:

TransformDictionary.h 与 TransformDictionary.m

//
//  TransformDictionary.h
//  Dic
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface TransformDictionary : NSObject

+ (void)withDictionary:(NSDictionary *)dictionary fileName:(NSString *)name;

@end


//
//  TransformDictionary.m
//  Dic
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "TransformDictionary.h"

@implementation TransformDictionary

+ (void)withDictionary:(NSDictionary *)dictionary fileName:(NSString *)name
{
    NSDictionary *dic         = dictionary;
    NSString *shortName       = name;
    NSString *fullHeadName    = [name stringByAppendingString:@".h"];
    NSString *fullContentName = [name stringByAppendingString:@".m"];
    
    // .h 文件头部信息
    __block NSString *headFileString = \
    [NSString stringWithFormat:@"//\n//  %@\n//\n//  Copyright (c) 2014年 Y.X. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface %@ : NSObject\n\n\n", fullHeadName, shortName];
    
    // .h 文件中间信息
    [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        if ([key isKindOfClass:[NSString class]]) {
            if ([dic[key] isKindOfClass:[NSString class]]) {
                headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSString       *%@;\n", key]];
            } else if ([dic[key] isKindOfClass:[NSNumber class]]) {
                headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSNumber       *%@;\n", key]];
            } else if ([dic[key] isKindOfClass:[NSDictionary class]]) {
                headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSDictionary   *%@;\n", key]];
            } else if ([dic[key] isKindOfClass:[NSArray class]]) {
                headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"@property (nonatomic, strong) NSArray        *%@;\n", key]];
            } else {
                NSLog(@"%@   %@",[dic[key] class], key);
                headFileString = [headFileString stringByAppendingString:[NSString stringWithFormat:@"//@property (nonatomic, strong) %@     *%@;\n", [dic[key] class], key]];
            }
        }
    }];
    
    // - (void)setValue:(id)value forUndefinedKey:(NSString *)key
    headFileString = [headFileString stringByAppendingString:@"\n\n- (void)setValue:(id)value forUndefinedKey:(NSString *)key;\n"];
    
    // - (instancetype)initWithDictionary:(NSDictionary *)dictionary
    headFileString = [headFileString stringByAppendingString:@"- (instancetype)initWithDictionary:(NSDictionary *)dictionary;\n"];
    
    
    // .h 文件尾部信息
    headFileString = [headFileString stringByAppendingString:@"\n\n@end\n\n"];
    
    // .h 文件路径
    NSString *headFileStringPath = \
    [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents/%@", fullHeadName]];
    
    // 写文件
    [headFileString writeToFile:headFileStringPath
                     atomically:YES
                       encoding:NSUTF8StringEncoding
                          error:nil];
    
    
    // ================================================================================= //
    
    
    // .m 文件
    NSString *contentFileString = \
    [NSString stringWithFormat:@"//\n//  %@\n//\n//  Copyright (c) 2014年 Y.X. All rights reserved.\n//\n\n#import \"%@\"\n\n@implementation %@\n\n", fullContentName, fullHeadName, shortName];
    
    
    // .m 文件中间部分
    // - (void)setValue:(id)value forUndefinedKey:(NSString *)key
    contentFileString = [contentFileString stringByAppendingString:@"- (void)setValue:(id)value forUndefinedKey:(NSString *)key\n{\n//    if([key isEqualToString:@\"id\"]) {\n//        self.productID = value;\n//    }\n}\n"];
    
    // - (void)setValue:(id)value forKey:(NSString *)key
    contentFileString = [contentFileString stringByAppendingString:@"\n- (void)setValue:(id)value forKey:(NSString *)key\n{\n    if ([value isKindOfClass:[NSNull class]]) {\n        return;\n    }\n\n    [super setValue:value forKey:key];\n}"];
    
    // - (instancetype)initWithDictionary:(NSDictionary *)dictionary
    contentFileString = [contentFileString stringByAppendingString:@"\n- (instancetype)initWithDictionary:(NSDictionary *)dictionary\n{\n    self = [super init];\n    if (self)\n    {\n        if ([dictionary isKindOfClass:[NSDictionary class]])\n        {\n            [self setValuesForKeysWithDictionary:dictionary];\n        }\n    }\n\n    return self;\n}\n"];
    
    // .m 文件尾部信息
    contentFileString = [contentFileString stringByAppendingString:@"\n\n@end"];
    
    // .m 文件路径
    NSString *contentFileStringPath = \
    [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents/%@", fullContentName]];
    
    [contentFileString writeToFile:contentFileStringPath
                        atomically:YES
                          encoding:NSUTF8StringEncoding
                             error:nil];
    
    // 提示信息
    NSLog(@"生成的文件在以下路径中 \n%@", [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents"]]);
}

@end

用工具生成的Model如下:

目录
相关文章
|
JSON 文字识别 API
ocr表格识别返回的json结果,转成excel,这个转化有对应的逻辑代码吗?
ocr表格识别返回的json结果,转成excel,这个转化有对应的逻辑代码吗?
523 0
|
11天前
|
Python
不同数据类型之间能否随意转化
不同数据类型之间能否随意转化。
18 5
|
29天前
|
存储 Unix C++
c++时间形式转换
【10月更文挑战第29天】在 C++ 中,时间形式转换主要涉及将时间在不同表示形式之间转换,如字符串与 `tm` 结构或 `time_t` 类型之间的转换。常用的基本时间类型包括 `time_t` 和 `tm` 结构,转换函数有 `strftime` 和 `strptime`,可以满足大多数时间处理需求。此外,还可以通过自定义类来扩展时间转换功能。
|
6月前
|
算法
年和日转化为天干地支
年和日转化为天干地支
22 0
|
机器学习/深度学习 存储 C语言
二进制优化的快读模板,以及常用的读入形式。
二进制优化的快读模板,以及常用的读入形式。
63 0
字符串的转化规则?
null和 undefined类型 ,null 转换为 “null”,undefined 转换为 “undefined”,
将读取的文本内容转换为特定格式
将读取的文本内容转换为特定格式
122 0
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
fastq文件转换成fasta文件
fastq文件转换成fasta文件
281 0
|
JavaScript 前端开发 算法
从规范的角度解析对象 — 原始值转换
从规范的角度解析对象 — 原始值转换
145 0
从规范的角度解析对象 — 原始值转换