2009-04-12 10 views
5

Estoy escribiendo una aplicación para iphone con JSON y estoy tratando de convertir cadenas JSON en objetos (NO diccionarios o matrices).iPhone + JSON + Reflection

En Java, gracias a la reflexión, que puede fácilmente convertir JSON en casos como éste 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); 

Me preguntaba si esto era posible en Objective-C. Actualmente estoy usando this marco JSON, pero estoy dispuesto a cambiar si es necesario.

Gracias,

Respuesta

4

Hay un proyecto de código abierto llamado objectiveresource y objectivesupport. Son implementaciones parciales de Objective-C de lo que se llama ActiveResource y ActiveSupport en el mundo de desarrollo de Ruby y RESTful. Parte de lo que objetivos soporta es serializar y deserializar el objeto JSON (así como XML). Si no desea utilizar los marcos completos tal como están, puede echar un vistazo al código fuente de objectiveupport y allí verá su implementación de serialización a/desde un NSObject. El código específico que desea mirar se enumeran a continuación: (Básicamente implementado como una categoría en los tipos NSObject, NSArray y NSDictionary) http://github.com/yfactorial/objectivesupport/tree/d08b5be6c0f7a2b0196b6ec17e4441bb146c4e23/Classes/lib/Serialization/JSON

Por cierto, parece que están usando un tenedor de la misma JSON framework que está utilizando .

+0

Terminé copiando todo el proyecto porque era demasiado difícil extraer solo las partes que hacían la serialización de objeto (de) JSON->. Pero funcionó, gracias – tba

0

Tal vez mirando al Objective-C Runtime Reference podrían ayudarle!

Hay algunas funciones (como class_createInstance y object_setInstanceVariable) que podrían ayudarlo.

+0

Eso funcionaría, pero esperaba que alguien más lo hubiera hecho y lo haya implementado en una biblioteca de análisis JSON :) – tba

+0

Si quieres hacer eso, sin volver a crear un analizador JSON entero, podrías transformar JSON a NSDictionary con el marco existente, repítelo y llame a las funciones de tiempo de ejecución. No es un método optimizado, pero podría funcionar;) –

0

Por si acaso alguien más llega aquí al buscar una respuesta a esta pregunta, hay otro proyecto que tiene exactamente lo que está buscando: JSON para iPhone, y nada más.

Have a look at here

Cuestiones relacionadas