如何parsingjsonparsing在android中使用GSON
我正在使用GSON
来分析Json数据。 我的Json数据如下:
{ "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; }
我正在使用下面的方法来parsing这个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; }
我面临着错误。
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
你可以尝试阅读像这样的gson值:
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(); }
假设你只是收到这一块,而不是一个列表。 而且这些数据目前还在资产文件夹中的一个文件中。 您可以将其更改为您想要从中读取的stream。
你使用的类应该是这样的:
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; } }
Words.class
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; } }
在words.class中缺less一个参数,你可以添加它。
GSON不直接支持UTF-8字符。 所以当使用http接收到响应时,您必须在http本身的响应中将其转换为utf-8格式。
你可以尝试使用:
String jsonString = new Gson().toJson(objectToEncode); byte[] utf8JsonString = jsonString.getBytes("UTF8"); responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);
你好在下面的gradle lib中使用
compile 'com.google.code.gson:gson:2.2.4'
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; } }
}
调用API将响应放在下面的代码和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(); }
希望对你有所帮助
更换
@SerializedName("name") public String count;
同
@SerializedName("name") public String name;
我猜这个问题是你正在使用public String count;
对于@SerializedName("count")
和@SerializedName("name")
谢谢。
尝试这个:
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); }
你的代码中缺less很多东西
请看下面的代码,并尝试这个代码..
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; } } }
更多的细节请看这个例子