2014-11-20 15 views
12

ho creato un semplice POJO:Crea JSONObject da POJO

public class LoginPojo { 
    private String login_request = null; 
    private String email = null; 
    private String password = null; 

    // getters, setters 
} 

Dopo qualche ricerca ho trovato questo: JSONObject jsonObj = new JSONObject(loginPojo);

Ma con questo ho ottenuto l'errore:

The constructor JSONObject(LoginPojo) is undefined 

ho trovato un altro soluzione:

JSONObject loginJson = new JSONObject(); 
loginJson.append(loginPojo); 

Ma questo metodo non esiste.

Quindi, come posso convertire il mio POJO in un JSON?

+0

hai controllato jsonSerializer/de-serializer? – Vihar

+3

Provate ad usare la libreria 'GSON' e' gson.toJsonTree (yourObject) .getAsJsonObject() ' – EpicPandaForce

risposta

17

sufficiente utilizzare il Java Gson API:

Gson gson = new GsonBuilder().create(); 
String json = gson.toJson(obj);// obj is your object 

E allora si può creare una JSONObject da questo JSON String, in questo modo:

JSONObject jsonObj = new JSONObject(json); 

Date un'occhiata a Gson user guide e questo SIMPLE GSON EXAMPLE per maggiori informazioni.

+4

L'autore ha chiesto di trasformare POJO in type JSONObject, non di digitare (json) String con gson. In senso stretto, questo non sta rispondendo alla domanda. – Samuel

+0

@ Samuel È molto semplice da ottenere. È sufficiente passare questa stringa a un nuovo costruttore 'JSONObject' come questo:' JSONObject jsonObj = new JSONObject (json); 'oppure usando ** JSONParser **' .parse() 'method. –

+0

Non fraintendetemi: non sto sostenendo di votare la tua risposta. – Samuel

0

Uso il jackson nel mio progetto, ma penso che sia necessario un costruttore vuoto.

public LoginPojo(){ 
} 
3

Jackson fornisce il parser JSON/generatore JSON come elemento di base; e aggiunge un potente Databinder (JSON < -> POJO) e Tree Model come blocchi aggiuntivi opzionali. Ciò significa che puoi leggere e scrivere JSON come stream di token (Streaming API), come Plain Old Java Objects (POJOs, databind) o come Trees (Tree Model). for more reference

si deve aggiungere jackson-core-asl-x.x.x.jar, jackson-mapper-asl-x.x.x.jar librerie per configurare Jackson nel progetto.

Codice Modificato:

LoginPojo loginPojo = new LoginPojo(); 
ObjectMapper mapper = new ObjectMapper(); 

try { 
    mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY); 

    // Setting values to POJO 
    loginPojo.setEmail("[email protected]"); 
    loginPojo.setLogin_request("abc"); 
    loginPojo.setPassword("abc"); 

    // Convert user object to json string 
    String jsonString = mapper.writeValueAsString(loginPojo); 

    // Display to console 
    System.out.println(jsonString); 

} catch (JsonGenerationException e){ 
    e.printStackTrace(); 
} catch (JsonMappingException e){ 
    e.printStackTrace(); 
} catch (IOException e){ 
    e.printStackTrace(); 
} 

Output : 
{"login_request":"abc","email":"[email protected]","password":"abc"} 
2

E 'possibile ottenere un (GSON) JsonObject da POJO:

JsonElement element = gson.toJsonTree(userNested); 
JsonObject object = element.getAsJsonObject(); 

Dopo di che si può prendere object.entrySet() e cercare tutto l'albero.

È l'unico modo assolutamente gratuito in GSON di cambiare dinamicamente quali campi vuoi vedere realmente.