Convertir objeto complejo de Java en Json

Necesito convertir la siguiente clase:

package comS309.traxz.data; import java.util.Collection; import org.json.JSONException; import org.json.JSONObject; public class ExerciseSession { public String DateCreated; public String TotalTime; public String CaloriesBurned; public String AvgSpeed; public String SessionName; public String Distance; public String SessionType; public String UserId; public Collection<LatLon> LatLons; } 

Donde LatLon es como sigue:

 public class LatLon { public String LatLonId; public String Latitude; public String Longitude; public String ExerciseSessionId; public String LLAveSpeed; public String Distance; } 

Así que la clase ExerciseSession tiene una colección de objetos LatLon. Ahora necesito convertir la clase de Ejercicio en un formato Json de java y enviarlo a mi servidor.

Estoy haciendo esto en el sistema operativo Android, si eso importa.

Mi solución actual es la siguiente:

 JSONObject ExerciseSessionJSOBJ = new JSONObject(); ExerciseSessionJSOBJ.put("DateCreated", this.DateCreated); ExerciseSessionJSOBJ.put("TotalTime", this.TotalTime); ExerciseSessionJSOBJ.put("CaloriesBurned", this.CaloriesBurned); ExerciseSessionJSOBJ.put("AvgSpeed", this.AvgSpeed); ExerciseSessionJSOBJ.put("SessionName", this.SessionName); ExerciseSessionJSOBJ.put("Distance", this.Distance); ExerciseSessionJSOBJ.put("SessionType", this.SessionType); ExerciseSessionJSOBJ.put("UserId", this.UserId); //add the collection for(LatLon l: LatLons) { ExerciseSessionJSOBJ.accumulate("LatLons", l); } 

No estoy seguro de que esto sea válido .. Soy un novato con Json y necesito ayuda. Gracias de antemano por la ayuda!

Esto es muy fácil de hacer con la biblioteca GSON de Google. He aquí un ejemplo de uso:

 Gson gson = new Gson(); String jsonRepresentation = gson.toJson(myComplexObject); 

Y para recuperar el objeto:

 Gson gson = new Gson(); MyComplexObject myComplexObject = gson.fromJson(jsonRepresentation, MyComplexObject.class); 

http://code.google.com/p/google-gson/

También puede serializar el objeto utilizando flexjson: http://flexjson.sourceforge.net/

Creo que usar el acumulado es correcto. Vea: http://www.json.org/javadoc/org/json/JSONObject.html#accumulate(java.lang.String,%20java.lang.Object )

Pero necesita crear un JSONObject para cada LatLon como lo hace para el objeto ExerciseSession. Entonces, la siguiente línea es incorrecta: ExerciseSessionJSOBJ.accumulate ("LatLons", l);

"L" debe ser transformado.

Realmente te sugiero que evites usar JSONObject para convertir entre Cuerdas y objetos Java. Probablemente reclamará su cordura si tiene que hacer demasiado de ella. Como alternativa, soy un gran fan de Jackson , que hace lo que usted describe de una manera realmente agradable y simple.

Como un ejemplo básico,

 public static class LatLon { public final String LatLonId; public final String Latitude; public final String Longitude; public final String ExerciseSessionId; public final String LLAveSpeed; public final String Distance; @JsonCreator public LatLon(@JsonProperty("distance") String distance, @JsonProperty("exerciseSessionId") String exerciseSessionId, @JsonProperty("latitude") String latitude, @JsonProperty("latLonId") String latLonId, @JsonProperty("LLAveSpeed") String LLAveSpeed, @JsonProperty("longitude") String longitude) { this.Distance = distance; this.ExerciseSessionId = exerciseSessionId; this.Latitude = latitude; this.LatLonId = latLonId; this.LLAveSpeed = LLAveSpeed; this.Longitude = longitude; } public static void something() { ObjectMapper mapper = new ObjectMapper(); String json = "{\"LLAveSpeed\":\"123\",\"Distance\":\"123\"," + "\"ExerciseSessionId\":\"123\",\"LatLonId\":\"123\"," + "\"Latitude\":\"123\",\"Longitude\":\"123\"}"; try { //turn the json string into a LatLon object. LatLon latLon = mapper.readValue(json, LatLon.class); //turn the latLon object into a new JSON string String newJson = mapper.writeValueAsString(latLon); //confirm that the strings are equal Log.w("JacksonDemo", "Are they equal? " + json.equals(newJson)); } catch (IOException e) { e.printStackTrace(); } } } 

Estas salidas Are they equal? true Are they equal? true .

Así que utiliza readValue() para convertir json en un objeto Java, writeValueAsString() para escribir un objeto en json. @JsonCreator marca el constructor que Jackson debería usar para convertir betwee json y Java. @JsonProperty("jsonKeyName") marca el nombre de una variable en la cadena json y la variable Java a la que debe asignarse.

Esto es un poco confuso al principio, pero ahorra mucho tiempo una vez que lo averigüe. Hazme saber si algo no está claro.

  • Vaciar RecyclerView utilizando datos obtenidos de parse.com
  • Cómo ordenar / organizar las claves de objeto JSON en android?
  • Java: Vista previa de la solicitud HttpPost
  • GSON / Jackson en Android
  • ¿Cómo puedo leer el archivo json de la tarjeta SD
  • Java.lang.IllegalArgumentException: Caracteres ilegales en la consulta
  • Cómo analizar esta matriz JSON anidada en android
  • Extraer el cuerpo del mensaje de HttpResponse
  • ¿Cómo analizar json array con múltiples objetos por gson?
  • Cómo analizar la matriz json anidado en android utilizando volley biblioteca
  • Análisis de JSON con GSON
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.