Convirtiendo cadena json en objeto Java?

He estado buscando ejemplos relacionados con la conversión de cadenas JSON a objetos Java pero no he encontrado ningún buen ejemplo. El que encontré fue realmente básico una vez y no trata realmente con cadenas complejas de JSON.

Estoy creando una aplicación para traducir cadenas de inglés a diferentes idiomas con la aplicación de traducción de Google. La respuesta de Google tras la consulta es … el texto engañoso tiene el formato JSON.

{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 

mi enfoque hasta el momento es el uso de GSON API, sin embargo, estoy atascado en realidad ¿cómo debo manipular este complicado resultado y crear un objeto Java?

Mi clase de Java es …

 import com.google.gson.Gson; public class JSONConverter { private String traslatedText; /** * Create an object of it self by manipulating json string * @param json type: String * @return String Translated text result from JSON responce */ public String getTranslation(String json){ Gson gson = new Gson(); JSONConverter obj = gson.fromJson(json, JSONConverter.class); return obj.getTranslationForReturn(); } /** * Method return a translation to a private call * @return String translation */ private String getTranslationForReturn(){ return this.traslatedText; } } 

El enfoque anterior no funciona, ya que no recibo “Bonjour tout le monde” a cambio,

sería un gran placer si alguien puede ampliar mi comprensión.

EDITAR: Necesita que su clase Java Data sea un modelo exacto de JSON. Entonces tus

 {"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 

se convierte en:

 class DataWrapper { public Data data; public static DataWrapper fromJson(String s) { return new Gson().fromJson(s, DataWrapper.class); } public String toString() { return new Gson().toJson(this); } } class Data { public List translations; } class Translation { public String translatedText; } 

A medida que el modelo de objetos se vuelve más complicado, el código de estilo org.json se vuelve ilegible, mientras que el mapeo de objetos de estilo gson / jackson sigue siendo simplemente objetos de Java.

Normalmente me gusta usar la biblioteca simple org.json

Úselo como:

  // make sure the quotes are escaped String str = "{\"data\":{\"translations\":[{\"translatedText\":\"Bonjour tout le monde\"}]}}"; // the object data is inside a "global" JSONObject data = new JSONObject(str).getJSONObject("data"); // get a JSONArray from inside an object JSONArray translations = data.getJSONArray("translations"); // get the first JSONObject from the array JSONObject text = translations.getJSONObject(0); // get the String contained in the object -> logs Bonjour tout le monde Log.d("***>Text", text.getString("translatedText")); 

Tal vez tanto código es menos claro de lo que me hubiera gustado. Esta es la función como lo haría:

 public String getTranslation(String json){ JSONObject data = new JSONObject(json).getJSONObject("data"); return data.getJSONArray("translations").getJSONObject(0).getString("translatedText"); } 

mira esto Convirtiendo JSON a Java , supongo que puedes definir una clase como el objeto y pasarla. Entonces, crea una clase y pásala.

Data obj = gson.fromJson(json, Data.class);

 class Data{ public List getTranslation(){ return translations; } } 

Prueba algo así. Es posible que necesite experimentar un poco.