[泛型的意思是,您将类和JSON传递给方法,并且该方法根据类定义来转换对象中的JSON数据。我对概念性答案和Objective-C方法都感兴趣。
我假设使用通用解析器,您的意思是一个隐式的JSON到对象映射器。
在这种情况下,有一个挑战。根据变量是否是Objective-C中的类型,哪一个可能可解决,(实际上我不知道这是可耻的)。尽管将setter方法名称(给Objective-C确实提供了反射)映射到JSON属性非常简单,但是很难知道要为嵌套的JSON对象创建哪个对象。因此,您需要一种可以猜测嵌套对象可能具有哪种类型的工厂。如果Objective-C中的变量是类型,则可以将其用作提示,否则,您将自己留下。
将数据导入NSArray等很容易,周围有很多这样的东西,例如json-framework
尝试一下(未试用):
#import <Cocoa/Cocoa.h>
#import "JSON/JSON.h"
int main(int argc, char *argv[])
{
NSLog(@"%@", [@"[ 100, 500, 300, 200, 400 ]" JSONValue]);
return 0;
}
正如Adrian所说,将您的数据结构映射到对象是一个挑战。它不在json-framework中,我不知道还有什么。可以肯定,但是我想如果您编写一些代码,则项目维护人员将接受您的代码:]。
您需要在传入的类上使用反射,从我所看到的来看,它不能像其他语言一样处理。
Class c = [self class];
将返回一个包含变量和方法列表的C结构,然后编写一个数据映射器样式系统以反映该类并为其分配JSON变量就可以了。
例如[]的JSON结构
var x = { prop1: "Test 1", prop2: "Test 2};
然后上一堂课
@interface x : NSObject { NSString* prop1; NSString* prop2; } @property (nonatomic,retain) NSString* prop1; @property (nonatomic,retain) NSString* prop2;
您需要有一个具体的实现,但实际上并不需要做任何花哨的事情。
然后,您的映射器可以使用反射来解析对象,也可以只使用愚蠢的分配:
- (NSObject)mapClassFromJSON:(NSObject)class fromJSON:(id)jsonArray { //code needs to iterate over the jsonArray (needs to check using isKindOfClass if it's an NSArray or NSDictionary) and assign the class properties to it. }
[请记住,如果每个人都使用SBJSON,返回的JSON中的类型可以是NSArray或NSDictionary,它需要知道哪个。如果沿着通用的嵌套路径前进,则将需要使用变量反射和一些智能来生成类型映射,否则需要对每个类进行硬编码。
编辑:看看
可能有用,可能没有...
从概念上讲,此方法称为serialization/deserialization。不同之处在于您的序列化格式将为JSON。实现:为您的类和JSON定义基本约定并实现它们。例如:每个JSON应该具有与该类相对应的uniq-id。
对于其他可能遇到此职位的人,有可能!碰巧有一些开源项目已经很好地做到了这一点。结帐休息套件和
我一点都不了解Objective-C,但我确实知道JSON。