Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

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

Gustavo Fernández
Gustavo Fernández

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;

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *