Reflection -- & gt; parse JSON data, reflection -- parse json

Source: Internet
Author: User

Reflection --> parse JSON data, reflection -- parse json

 

Method 1 Persons. json File
[ { "name": "Chris", "age": 18, "city": "Shanghai", "job": "iOS" }, { "name": "Ada", "age": 16, "city": "Beijing", "job": "student" }, { "name": "Rita", "age": 17, "city": "Xiamen", "job": "HR" } ]
Model. h class
 1 #import <Foundation/Foundation.h> 2  3 @interface PersonModel : NSObject 4  5 @property (nonatomic, copy) NSString *name; 6 @property (nonatomic, assign) NSInteger age; 7 @property (nonatomic, copy) NSString *city; 8 @property (nonatomic, copy) NSString *job; 9 @property (nonatomic, copy) NSString *sex;10 11 - (instancetype)initWithNSDictionary:(NSDictionary *)dict;12 13 @end

 

Model. m class
 1 #import "PersonModel.h" 2 #import <objc/runtime.h> 3  4 @implementation PersonModel 5  6 - (instancetype)initWithNSDictionary:(NSDictionary *)dict { 7     self = [super init]; 8     if (self) { 9         [self prepareModel:dict];10     }11     return self;12 }13 14 - (void)prepareModel:(NSDictionary *)dict {15     NSMutableArray *keys = [[NSMutableArray alloc] init];16     17     u_int count = 0;18     objc_property_t *properties = class_copyPropertyList([self class], &count);19     for (int i = 0; i < count; i++) {20         objc_property_t property = properties[i];21         const char *propertyCString = property_getName(property);22         NSString *propertyName = [NSString stringWithCString:propertyCString encoding:NSUTF8StringEncoding];23         [keys addObject:propertyName];24     }25     free(properties);26     27     for (NSString *key in keys) {28         if ([dict valueForKey:key]) {29             [self setValue:[dict valueForKey:key] forKey:key];30         }31     }32 }33 34 @end

 

 

Call
1 NSString *file = [[NSBundle mainBundle] pathForResource:@"Persons" ofType:@"json"];2     NSData *data = [NSData dataWithContentsOfFile:file];3     NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];4     5     for (NSDictionary *model in array) {6         PersonModel *person = [[PersonModel alloc] initWithNSDictionary:model];7         NSLog(@"%@, %ld, %@, %@", person.name, (long)person.age, person.city, person.job);8     }

 

 

Print result:

 

 

 

 

Method 2

The data model's parent class is JSONModel.

The subclasses of JSONModel are: JSONPerson, JSONStudent, and JSONTeacther;

JSONStudent. h
 1 @import JSONModel; 2  3 @interface JSONStudent : JSONModel 4  5 @property (nonatomic, copy) NSString * id; 6 @property (nonatomic, copy) NSString * name; 7 @property (nonatomic, copy) NSString * nickName; 8 @property (nonatomic, copy) NSString * phoneNumber; 9 10 @end

 

 

Note: This is written in OC!

Get attributes
 1 func getAllProperties<T: JSONModel>(anyClass: T) -> [String] { 2         var properties = [String]() 3         let count = UnsafeMutablePointer<UInt32>.allocate(capacity: 0) 4         let buff = class_copyPropertyList(object_getClass(anyClass), count) 5         let countInt = Int(count[0]) 6          7         for i in 0..<countInt { 8             let temp = buff![i] 9             let tempPro = property_getName(temp)10             let proper = String(utf8String: tempPro!)11             properties.append(proper!)12         }13         return properties14         15     }

 

Note: It is easy to use Swift and OC to obtain attributes written in Swift!

Use
1 func returnListStudent (students: [JSONStudent]) {2 for item in students {3 let studentProperties = self. getAllProperties (anyClass: item) 4 for I in 0 .. <studentProperties. count {5 print ("value: \ (item. value (forKey: studentProperties [I]) "+" Property: \ (studentProperties [I]) "self. dataError) 6} 7} 8}

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.