2009-04-12 32 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