¿Conversión de json string a objeto java?
He estado buscando alrededor de ejemplos relacionados con la conversión de cadenas JSON a objeto Java, pero no han encontrado ningún buen ejemplo. El que encontré fue realmente básico una vez y realmente no se trata de complejas cadenas JSON.
Estoy haciendo una aplicación para traducir cadenas de inglés a diferentes idiomas utilizando google translate api. La respuesta de Google en la consulta es … el texto de foolowing se da formato en JSON,
- Forzar a GSON a usar Constructor que contenga Setters o Setters en general, en lugar de Fields
- Envío de datos JSON de Android a PHP y escritura a archivo de texto
- Valor nulo devuelto de la conexión entre android y base de datos MYSQL
- Reemplazar el analizador estándar de Android JSON para un mejor rendimiento?
- Subida de imagen multiparte de Android con HttpConnectionParams obsoleta en nueva API
{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}}
Mi enfoque hasta ahora está utilizando GSON API, sin embargo, estoy atrapado por la realidad ¿cómo debo manipular este resultado complicado y crear 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; } }
Por encima del enfoque no funciona ya que no estoy recibiendo "Bonjour tout le monde" a su regreso,
Sería un gran placer si alguien pudiera ampliar mi comprensión.
- Error json de Android com.google.gson.JsonSyntaxException: java.lang.IllegalStateException
- Tiempo de viaje entre dos ubicaciones en Google Map Android API V2
- ¿Cómo comprobar si la respuesta del servidor es JSONAobject o JSONArray?
- Obtenga el objeto JSON uno por uno desde la matriz JSON en Android utilizando Retrofit y RxJava
- Cómo obtener cadena de JSONObject sin nombre específico
- Obtenga un objeto json simple usando retrofit 2
- Obtener claves de array json en android
- Problema de análisis de Json (valores cambiados automáticamente flotante)
EDIT: Usted necesita su clase de datos java para ser un modelo exacto de la 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<Translation> translations; } class Translation { public String translatedText; }
A medida que el modelo de objeto se vuelve más complicado, el código de estilo org.json cambia a ilegible mientras que la asignación de objetos estilo gson / jackson sigue siendo simplemente objetos java.
Normalmente me gusta usar la biblioteca org.json simple
Utilícelo 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 yo lo haría:
public String getTranslation(String json){ JSONObject data = new JSONObject(json).getJSONObject("data"); return data.getJSONArray("translations").getJSONObject(0).getString("translatedText"); }
Comprobar esto Conversión de JSON a Java , supongo que puede definir una clase como el objeto y pasar que a lo largo. Por lo tanto, crear un poco de clase y pasar a lo largo.
Data obj = gson.fromJson(json, Data.class);
class Data{ public List<Data> getTranslation(){ return translations; } }
Prueba algo así. Puede que tenga que experimentar un poco.
- Publicación de actualizaciones de Android al mercado – ¿Cuánto tiempo hasta que aparecen?
- Spinner no puede cargar una matriz de números enteros?