Serialize and Deserialize Objective-C objects into JSON

后端 未结 7 1735
花落未央
花落未央 2020-11-30 01:05

I need to serialize and deserialize objective-c objects into JSON to store in CouchDB. Do people have any example code for best practice for a general solution? I looked a

相关标签:
7条回答
  • 2020-11-30 02:00

    Finally we can solve this problem easily using JSONModel. This is the best method so far. JSONModel is a library that generically serialize/deserialize your object based on Class. You can even use non-nsobject based for property like int, short and float. It can also cater nested-complex JSON.

    Considering this JSON example:

    { "accounting" : [{ "firstName" : "John",  
                        "lastName"  : "Doe",
                        "age"       : 23 },
    
                      { "firstName" : "Mary",  
                        "lastName"  : "Smith",
                        "age"       : 32 }
                                  ],                            
      "sales"      : [{ "firstName" : "Sally", 
                        "lastName"  : "Green",
                        "age"       : 27 },
    
                      { "firstName" : "Jim",   
                        "lastName"  : "Galley",
                        "age"       : 41 }
                      ]}
    

    1) Deserialize example. in header file:

    #import "JSONModel.h"
    
    @interface Person : JSONModel 
    @property (nonatomic, strong) NSString *firstName;
    @property (nonatomic, strong) NSString *lastName;
    @property (nonatomic, strong) NSNumber *age;
    @end
    
    @protocol Person;
    
    @interface Department : JSONModel
    @property (nonatomic, strong) NSMutableArray<Person> *accounting;
    @property (nonatomic, strong) NSMutableArray<Person> *sales;
    @end
    

    in implementation file:

    #import "JSONModelLib.h"
    #import "myJSONClass.h"
    
    NSString *responseJSON = /*from example*/;
    Department *department = [[Department alloc] initWithString:responseJSON error:&err];
    if (!err)
    {
        for (Person *person in department.accounting) {
    
            NSLog(@"%@", person.firstName);
            NSLog(@"%@", person.lastName);
            NSLog(@"%@", person.age);         
        }
    
        for (Person *person in department.sales) {
    
            NSLog(@"%@", person.firstName);
            NSLog(@"%@", person.lastName);
            NSLog(@"%@", person.age);         
        }
    }
    

    2) Serialize Example. In implementation file:

    #import "JSONModelLib.h"
    #import "myJSONClass.h"
    
    Department *department = [[Department alloc] init];
    
    Person *personAcc1 = [[Person alloc] init];
    personAcc1.firstName = @"Uee";
    personAcc1.lastName = @"Bae";
    personAcc1.age = [NSNumber numberWithInt:22];
    [department.accounting addOject:personAcc1];
    
    Person *personSales1 = [[Person alloc] init];
    personSales1.firstName = @"Sara";
    personSales1.lastName = @"Jung";
    personSales1.age = [NSNumber numberWithInt:20];
    [department.sales addOject:personSales1];
    
    NSLog(@"%@", [department toJSONString]);
    

    And this is NSLog result from Serialize example:

    { "accounting" : [{ "firstName" : "Uee",  
                        "lastName"  : "Bae",
                        "age"       : 22 }
                     ],                            
      "sales"      : [{ "firstName" : "Sara", 
                        "lastName"  : "Jung",
                        "age"       : 20 }
                      ]}
    
    0 讨论(0)
提交回复
热议问题