Deserializando arrays de objetos en formato json usando la librería flexjson

Algo que se suele tener que hacer cuando se usan modelos de comunicación basados en JSON es las deserialización de strings a objetos en el lenguaje en que esté programada la aplicación en el servidor.

En el caso de zylk.net lo normal es usar Java como lenguaje de servidor, para la serialización/deserialización de objetos en JSON solemos usar flexjson. La serialización y deserialización de objetos es más o menos secillas con esta librería, pero hay un caso que aunque sencillo es interesante explicar.

Supongamos que tenemos un Bean de java (atributos y getters and setters), por ejemplo una calle que se define con el siguiente bean

	public class Calle {

    public Calle(String descripcionOficial, String id) {
        super();
        this.descripcionOficial = descripcionOficial;
        this.id = id;
    }
    private String descripcionOficial;
    private String id;
    public String getDescripcionOficial() {
        return descripcionOficial;
    }
    public void setDescripcionOficial(String descripcionOficial) {
        this.descripcionOficial = descripcionOficial;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    
}

E imaginemos que existe un servicio REST/JSON que devuelve un array de estos objetos algo como:

[{descripcionOficial:"calle 1",id:"123456"}, {descripcionOficial:"calle 2",id:"123457"}, {descripcionOficial:"calle 3",id:"123458"}]

Si necesitamos crear un array de este tipo de beans en java basta con hacer uso de los deserializadores la librería flexjson de la siguiente manera

List<Calle> calles = null;

calles = new JSONDeserializer<List<Calle>>().use( "values", Calle.class ).deserialize(jsonString);

Donde le estamos indicando al deserializador que el string jsonString es una Lista JSONDeserializer<List<Calle>>()  y que los elementos que componen esta lista son los beans tipo Calle .use( "values", Calle.class )

Update:

Se hace de manera equivalente usando las clases del kernel de liferay que son wrappers sobre flexjson

JSONDeserializer<List<Test>>  a = JSONFactoryUtil.createJSONDeserializer();
List<Test> b = a.use("values", Test.class).deserialize(s);

 

Pero usando los siguientes imports:

import com.liferay.portal.kernel.json.JSONDeserializer;
import com.liferay.portal.kernel.json.JSONFactoryUtil;

00

More Blog Entries

0 Comments