gpt4 book ai didi

objective-c - 将 Objective-C 对象序列化和反序列化为 JSON

转载 作者:IT老高 更新时间:2023-10-28 12:49:03 29 4
gpt4 key购买 nike

我需要将objective-c 对象序列化和反序列化为JSON 以存储在CouchDB 中。人们是否有任何示例代码可用于一般解决方案的最佳实践?我查看了一些 JSON 框架,它们停在 NSDictionary/NSArray 级别。即很多框架会将 NSDictionary/NSArray 序列化和反序列化为 JSON。但我仍然需要将 NSDictionary 转换为 Objective-C 对象。

为了让事情变得更复杂,我的对象 A 可以引用对象 B 的 NSArray/NSDictionary。

我的问题与这个问题非常相似,但增加了收集要求。

Instantiating Custom Class from NSDictionary

最佳答案

最后我们可以使用 JSONModel 轻松解决这个问题。 .这是迄今为止最好的方法。 JSONModel 是一个基于 Class 对对象进行一般序列化/反序列化的库。你甚至可以使用基于非 nsobject 的属性,例如 intshortfloat。它还可以满足嵌套复杂的 JSON。

考虑这个 JSON 示例:

{ "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) 反序列化示例。在头文件中:

#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

在实现文件中:

#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) 序列化示例。在实现文件中:

#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]);

这是序列化示例的 NSLog 结果:

{ "accounting" : [{ "firstName" : "Uee",  
"lastName" : "Bae",
"age" : 22 }
],
"sales" : [{ "firstName" : "Sara",
"lastName" : "Jung",
"age" : 20 }
]}

关于objective-c - 将 Objective-C 对象序列化和反序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172001/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com