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
- Convertir JSONArray a Array de cadenas
- Hacer formas dinámicas (el mejor enfoque)
- Pase y reciba el objeto JSON de Jersey Resftul webservice desde android
- Json no funciona con HttpPost probablemente alrededor de setEntity
- JSONObject en JSONObject
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
- ¿Conversión de json string a objeto java?
- ¿JSON en un campo del sqlite?
- Credenciales de la cuenta de servicio de Firebase Permiso de lectura de Json leído
- Los parámetros de clase anidados de Gson no tienen valores
- Cursor de Android a JSONArray
- Generar listview desde JSON en android
- Mapa Ver instrucciones de dibujo usando google Directions API - decodificar polilíneas
- Mensaje de error 'java.net.SocketException: socket failed: EACCES (Permiso denegado)'
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
- GetActionBar de Fragment con AppCompatLibrary
- NavigationDrawer utilizando sólo la biblioteca de asistencia de Android