Objective-c 自定对象 转 JSON

本文介绍了一个将NSObject及其子类转换为JSON格式的方法。通过遍历对象的所有属性,并递归处理数组、字符串、日期等类型,最终形成JSON字典。特别地,文章详细展示了NSDate的格式化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#pragma mark - NSObject to JSON -


static NSDateFormatter *reverseFormatter;


- (NSDateFormatter *)getReverseDateFormatter {

    if (!reverseFormatter) {

        NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

        reverseFormatter = [[NSDateFormatter alloc] init];

        [reverseFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];

        [reverseFormatter setLocale:locale];

    }

    return reverseFormatter;

}


- (NSDictionary *)dictionaryWithPropertiesOfObject:(id)obj {

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    

    unsigned count;

    objc_property_t *properties = class_copyPropertyList([obj class], &count);

    

    for (int i = 0; i < count; i++) {

        NSString *key = [NSString stringWithUTF8String:property_getName(properties[i])];

        id object = [obj valueForKey:key];

        

        if (object) {

            if ([object isKindOfClass:[NSArray class]]) {

                NSMutableArray *subObj = [NSMutableArray array];

                for (id o in object) {

                    [subObj addObject:[self dictionaryWithPropertiesOfObject:o]];

                }

                dict[key] = subObj;

            }

            else if ([object isKindOfClass:[NSString class]]) {

                dict[key] = object;

            } else if ([object isKindOfClass:[NSDate class]]) {

                dict[key] = [[self getReverseDateFormatter] stringFromDate:(NSDate *) object];

            } else if ([object isKindOfClass:[NSNumber class]]) {

                dict[key] = object;

            } else if ([[object class] isSubclassOfClass:[NSObject class]]) {

                dict[key] = [self dictionaryWithPropertiesOfObject:object];

            }

        }

        

    }

    return dict;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值