2009-04-12 48 views
5

我正在用JSON编写iphone应用程序,并试图将JSON字符串转换为对象(不是字典或数组)。iPhone + JSON + Reflection

在Java中,由于反射,我可以很容易地把JSON到JavaBean的情况下是这样的:

import net.sf.json.JSONObject; 
class MyBean { 
    private String property; 
    public String getProperty() { return property; } 
    public void setProperty(String property) { this.property=property; } 
} 

// turn JSON string into a MyBean instance 
String str = "{\"property\":\"some value\"}"; 
JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(str); 
JsonConfig jsonConfig = new JsonConfig(); 
jsonConfig.setRootClass(MyBean.class); 
MyBean instance = (MyBean) JSONSerializer.toJava(jsonObject, jsonConfig); 

我想知道,这在Objective-C是可能的。我目前使用this JSON框架,但愿意在必要时进行切换。

感谢,

回答

4

有一个开源项目名为objectiveresourceobjectivesupport。它们是Ruby和RESTful开发世界中所谓的ActiveResource和ActiveSupport的部分Objective-C实现。部分支持的目标是序列化和反序列化JSON(以及XML)对象。如果你不想按照原样使用完整的框架,你可以看看objectivesupport的源代码,在那里你会看到他们的序列化到/从NSObject的实现。你想看看具体代码如下:(基本上作为NSObject的,NSArray中和NSDictionary的类型类别来实现) http://github.com/yfactorial/objectivesupport/tree/d08b5be6c0f7a2b0196b6ec17e4441bb146c4e23/Classes/lib/Serialization/JSON

BTW,他们似乎是使用相同的JSON framework的一个分支,你正在使用。

0

也许看Objective-C Runtime Reference可以帮助你!

有一些功能(如class_createInstanceobject_setInstanceVariable)可以帮助你。

+0

这将工作,但我希望别人已经做到了,并将其实现到JSON解析库:) – tba 2009-04-12 22:42:48

+0

如果你想这样做,而不重新创建一个完整的JSON解析器,你可以转换JSON使用现有框架将NSDictionary转换为循环,并调用运行时功能。这不是一个优化的方法,但它可以工作;) – 2009-04-12 23:10:53

0

为了防止任何人在这里寻找这个问题的答案时得到这里,还有另一个项目,你正在寻找什么:JSON的iPhone,没有别的。

Have a look at here