2012-06-12 20 views
5

Soy muy nuevo en Json y mi objetivo es crear la salida de Json a continuación del bean de Java. ¿Cómo debería estructurar mi objeto Java? ¿Debería tener la clase MyResult y User and Result como subclases? ¿Qué biblioteca Json puedo usar para esto?Json - Objeto de Java para Json

“MyResult” { 
    “AccountID”: “12345”, 
    "User" { 
     "Name": "blah blah", 
     "Email": “[email protected]”, 
    }, 
    "Result" { 
     "Course": “blah”, 
     "Score": “10.0” 
    } 
} 
+0

Gracias por la respuesta. Si tuviera que diseñar esto en Jackson, ¿cómo debería ser mi objeto Java? – user238021

Respuesta

9

Nota: Soy el líder EclipseLink JAXB (MOXy) y miembro del grupo de expertos JAXB (JSR-222).


¿Cómo debo estructurar mi objeto Java?

A continuación se muestra el aspecto de su modelo de objeto. La vinculación JSON de MOXy aprovecha las anotaciones de JAXB para mapear el modelo de dominio a JSON, por lo que también las he incluido. Las implementaciones JAXB tienen reglas predeterminadas para correlacionar nombres de campos/propiedades, pero dado que su documento difiere del predeterminado, cada campo debe ser anotado.

MiResultado

package forum11001458; 

import javax.xml.bind.annotation.*; 

@XmlRootElement(name="MyResult") 
public class MyResult { 

    @XmlElement(name="AccountID") 
    private String accountID; 

    @XmlElement(name="User") 
    private User user; 

    @XmlElement(name="Result") 
    private Result result; 

} 

usuario

package forum11001458; 

import javax.xml.bind.annotation.XmlElement; 

public class User { 

    @XmlElement(name="Name") 
    private String name; 

    @XmlElement(name="Email") 
    private String email; 

} 

Resultado

package forum11001458; 

import javax.xml.bind.annotation.XmlElement; 

public class Result { 

    @XmlElement(name="Course") 
    private String course; 

    @XmlElement(name="Score") 
    private String score; 

} 

¿Qué biblioteca Json puedo usar para esto?

A continuación se muestra cómo se puede utilizar moxy hacer la unión JSON:

jaxb.propiedades

Para utilizar moxy como su proveedor de JAXB es necesario incluir un archivo llamado jaxb.properties con la siguiente entrada en el mismo paquete que el modelo de dominio:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

demostración

Nota cómo El enlace JSON de MOXy no requiere ninguna dependencia de tiempo de compilación. Todas las API necesarias están disponibles en Java SE 6. Puede añadir las API de apoyo necesarios si está utilizando Java SE 5.

package forum11001458; 

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(MyResult.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     unmarshaller.setProperty("eclipselink.media-type", "application/json"); 
     File json = new File("src/forum11001458/input.json"); 
     Object myResult = unmarshaller.unmarshal(json); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty("eclipselink.media-type", "application/json"); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(myResult, System.out); 
    } 

} 

input.json/salida

{ 
    "MyResult" : { 
     "AccountID" : "12345", 
     "User" : { 
     "Name" : "blah blah", 
     "Email" : "[email protected]" 
     }, 
     "Result" : { 
     "Course" : "blah", 
     "Score" : "10.0" 
     } 
    } 
} 
7

Googles GSON es un muy buen lib JSON. This es del enlace anterior y básicamente describe algunas de sus funcionalidades.

5

jackson es también muy rápido y fácil de usar

+0

Gracias por la respuesta. Si tuviera que diseñar esto en Jackson, ¿cómo debería ser mi objeto Java? – user238021

1

Aunque cerrada, this SO post puede ayudarle a entender las diferencias entre Jackson y GSON. Cuál es el "mejor" depende de lo que es importante para usted.

EDITAR: Específicamente para Jackson, su ejemplo se parece mucho al ejemplo que dan para lo que llaman Enlace de datos completo, puede leerlo here. Por cierto, aunque los 5 minutos anunciados necesarios para leer ese documento son tal vez un poco cortos, ofrece una descripción completa de las diferentes maneras en que se puede usar Jackson. También notará que los ejemplos dados no usan anotaciones.

1

O GSON

Super fácil (sin getters/settres, sin anotaciones o configuraciones necesarias).

class BagOfPrimitives { 
    private int value1 = 1; 
    private String value2 = "abc"; 
    private transient int value3 = 3; 
} 

BagOfPrimitives obj = new BagOfPrimitives(); 
Gson gson = new Gson(); 
String json = gson.toJson(obj); 

==> json is {"value1":1,"value2":"abc"} 
+0

Ahora veo, @fvu dijo lo mismo. de todas formas. – ses