泛型的意思是你将一个类和一个JSON传递给一个方法,该方法根据类定义转换对象中的JSON数据。
我对概念性答案和Objective-C方法感兴趣。
答案 0 :(得分:1)
我假设使用通用解析器,你的意思是一个隐式的JSON到对象映射器。
在这种情况下,有一个挑战。取决于变量是否是Objective-C中的类型,这可能是也可能是不可解决的(实际上这是一种耻辱我不知道)。虽然映射setter方法名称(给定Objective-C确实为jason属性提供反射)非常简单,但很难知道为嵌套的jason对象创建哪个对象。因此,您需要一种工具来猜测嵌套对象可能具有哪种类型。如果Objective-C中的变量是类型,那么可以用作提示,如果不是,则由你自己保留。
答案 1 :(得分:0)
嗯,从概念上讲,这种方法称为serialization/deserialization。不同之处在于您的序列化格式将是JSON。实现:为您的类和JSON定义基本约定并实现它们。例如:每个JSON都应该具有与该类对应的uniq-id。
我不熟悉Objective-C,但如果我在其他语言中这样做,我会假设,JSON中的每个键都代表该类的属性。这个属性可以通过像classInstance.setJsonAttribute(key, value);
之类的函数来设置然后,我会编写一些JSON解析器,它将遍历JSON,提取uniq-id,基于此id创建类,并遍历所有其他键:值解析,设置他们用setJsonAttribute函数。我想,这将是我实施的开始。
答案 2 :(得分:0)
你需要在传入的类中使用反射,而不是我能看到的其他一些语言。
Class c = [self class];
将返回一个包含变量和方法列表的C结构,然后编写一个数据映射器样式系统来反映该类并为其分配JSON变量。
E.g。
的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,它需要知道哪些。如果沿着通用路径进行嵌套,则需要使用变量反射和一些智能来生成类型映射,否则需要对每个类进行硬编码。
编辑: 看看
可能有用,可能不会......
答案 3 :(得分:0)
将数据输入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框架中,我不知道还有什么。当然,但我想项目维护者会接受你的代码,如果你写一些:)。
答案 4 :(得分:0)
对于可能遇到这篇文章的其他人来说,这是有可能的!碰巧有一些开源项目已经做得很好。结账休息套件和
答案 5 :(得分:-1)
我根本不懂Objective-c,但我确实知道JSON。
它是一种统一的数据交换格式,带有RFC,因此您肯定能够为自己的解析器角色。 objective-c是否支持泛型类型?如果是这样,你所寻找的东西是可以实现的,并且id也猜测其他人已经准备就绪了。