Cómo analizar el análisis de json Usando GSON en android

Estoy utilizando GSON para analizar los datos de Json. Mis datos de Json están abajo:

 { "count": "12", "colbreak": 1, "name": "unary rels", "score": "9090", "Words": [ { "count": 6, "word": "prp_għaċ-", "name": "prp_għaċ-", "score": 9.1, "Words": "kol", "seek": 2231297 } ], "seek": 0 } 

GsonParse.java

 public class GsonParse { @SerializedName("count") public String count; @SerializedName("colbreak") public String colbreak; @SerializedName("name") public String count; @SerializedName("score") public String score; @SerializedName("Words") public List<Words> mWords = new ArrayList<Words>(); @SerializedName("seek") public String seek; } 

Estoy utilizando el siguiente método para analizar los datos de JSON.

 public static <T> ArrayList<T> JsonParse(T t, String response) { // convert String into InputStream InputStream in = new ByteArrayInputStream(response.getBytes()); JsonReader reader; ArrayList<T> lcs = new ArrayList<T>(); try { reader = new JsonReader(new InputStreamReader(in, "UTF-8")); Gson gson = new Gson(); reader.beginObject(); while (reader.hasNext()) { T cse = (T) gson.fromJson(reader, t.getClass()); lcs.add(cse); } reader.endObject(); /* * reader.nextName(); reader.nextString(); reader.nextName(); * reader.nextString(); */ reader.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return (ArrayList<T>) lcs; } 

Estoy enfrentando error por debajo.

 03-31 10:14:26.968: E/AndroidRuntime(18578): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73 

Usted podría intentar leer el valor del gson como esto:

 try { AssetManager assetManager = getAssets(); InputStream ims = assetManager.open("file.txt"); Gson gson = new Gson(); Reader reader = new InputStreamReader(ims); GsonParse gsonObj = gson.fromJson(reader, GsonParse.class); }catch(IOException e) { e.printStackTrace(); } 

Suponiendo que reciba este bloque y no una lista. Y también estos datos están actualmente en un archivo en la carpeta de activos. Puede cambiarla a la secuencia de la que desea leerla.

La clase que usted usa debe tener el siguiente aspecto:

GsonParse.class

 public class GsonParse { @SerializedName("count") private String count; @SerializedName("colbreak") private String colbreak; @SerializedName("name") private String name; @SerializedName("score") private String score; @SerializedName("Words") private List<Words> mWords = new ArrayList<Words>(); @SerializedName("seek") private String seek; public String getCount() { return count; } public void setCount(String count) { this.count = count; } public String getColbreak() { return colbreak; } public void setColbreak(String colbreak) { this.colbreak = colbreak; } private String getName() { return name; } private void setName(String name) { this.name = name; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public List<Words> getmWords() { return mWords; } public void setmWords(List<Words> mWords) { this.mWords = mWords; } public String getSeek() { return seek; } public void setSeek(String seek) { this.seek = seek; } } 

Clase de palabras

 public class Words { @SerializedName(value ="count") private String count; @SerializedName(value="word") private String word; @SerializedName(value="score") private String name; @SerializedName(value="Words") private String words; @SerializedName(value="seek") private String seek; public String getCount() { return count; } public void setCount(String count) { this.count = count; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWords() { return words; } public void setWords(String words) { this.words = words; } public String getSeek() { return seek; } public void setSeek(String seek) { this.seek = seek; } } 

Hay un parámetro que falta en words.class, puede agregarlo.

GSON no admite directamente caracteres UTF-8. Por lo que al recibir la respuesta utilizando http, tendrá que convertir esa forma utf-8 en la respuesta de http en sí.

Puede intentar usar:

 String jsonString = new Gson().toJson(objectToEncode); byte[] utf8JsonString = jsonString.getBytes("UTF8"); responseToClient.write(utf8JsonString, 0, utf8JsonString.Length); 

Hola uso debajo de gradle lib

 compile 'com.google.code.gson:gson:2.2.4' 

Clase Json

 import java.util.List; public class GsonParse{ /** * count : 12 * colbreak : 1 * name : unary rels * score : 9090 * Words : [{"count":6,"word":"prp_għaċ-","name":"prp_għaċ-","score":9.1,"Words":"kol","seek":2231297}] * seek : 0 */ private String count; private int colbreak; private String name; private String score; private int seek; /** * count : 6 * word : prp_għaċ- * name : prp_għaċ- * score : 9.1 * Words : kol * seek : 2231297 */ private List<WordsBean> Words; public String getCount() { return count; } public void setCount(String count) { this.count = count; } public int getColbreak() { return colbreak; } public void setColbreak(int colbreak) { this.colbreak = colbreak; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public int getSeek() { return seek; } public void setSeek(int seek) { this.seek = seek; } public List<WordsBean> getWords() { return Words; } public void setWords(List<WordsBean> Words) { this.Words = Words; } public static class WordsBean { private int count; private String word; private String name; private double score; private String Words; private int seek; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public String getWords() { return Words; } public void setWords(String Words) { this.Words = Words; } public int getSeek() { return seek; } public void setSeek(int seek) { this.seek = seek; } } 

}

La API de llamada pone la respuesta en código inferior y Retrive Data

 GsonParse gsonparse = gson.fromJson(response, GsonParse.class); //gsonparse.getWords() // It will returns list of Words //Also do loop and get more data using data gsonparse.getColbreak(); gsonparse.getSeek(); for (GsonParse.WordsBean data:gsonparse.getWords()) { data.getName(); } 

Espero que te ayude

Reemplazar

@SerializedName("name") public String count; con

 @SerializedName("name") public String name; 

Supongo que el problema es que usted está usando public String count; Para ambos @SerializedName("count") y @SerializedName("name")

Gracias.

Prueba esto:

 JSONArray jsonarray = jsonObject.getJSONArray("responseData"); Type listType = new TypeToken<ArrayList<AllUsers>>(){}.getType(); List<AllUsers> allUserses = new GsonBuilder().create().fromJson(jsonarray.toString(), listType); for(AllUsers user: allUserses){ allUsersDao.insertOrReplace(user); } 

Hay muchas cosas que faltan en su código ..

Por favor, mira el siguiente código y prueba este código ..

 import java.util.List; public class GsonParse { public GsonParse() { } public String count = ""; public String colbreak = ""; public String name = ""; public String score = ""; public int seek = 0; List<WordsData> Words; public String getCount() { return count; } public void setCount(String count) { this.count = count; } public String getColbreak() { return colbreak; } public void setColbreak(String colbreak) { this.colbreak = colbreak; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public int getSeek() { return seek; } public void setSeek(int seek) { this.seek = seek; } public List<WordsData> getWords() { return Words; } public void setWords(List<WordsData> words) { Words = words; } public class WordsData { public WordsData() { } public int count = 0; public String word = ""; public String name = ""; public double score = 0.0; public String Words = ""; public int seek = 0; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public String getWords() { return Words; } public void setWords(String words) { Words = words; } public int getSeek() { return seek; } public void setSeek(int seek) { this.seek = seek; } } } 

Para más detalles, mira este ejemplo

  • Configuración del tipo de contenido Json para el cliente Rest
  • Uso de Gson para analizar subclases con diferentes campos
  • Valor de Json Parsing y Nullable int en android
  • Obtener una matriz de CLAVES para cada elemento bajo jsonarray
  • Java: Vista previa de la solicitud HttpPost
  • Serializar objeto personalizado que contiene objetos JodaTime en JSON
  • Jackson JsonParseException: Byte medio de UTF-8 no válido
  • Androide estudio Logcat muestra datos json en una sola línea y parte de los datos
  • Java.lang.RuntimeException: Error al invocar public com.example.syncapp.MessageBase () sin args
  • Respuesta de array JSon en imagebutton android con onclick
  • Android Volley método de eliminación, ¿por qué enviar parámetros vacíos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.