Jsonデータの解析にGSON
を使用しています。私の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;
}
以下のメソッドを使用して、この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();
}
リストではなく、この1つのブロックを受信していると仮定します。また、このデータは現在アセットフォルダのファイルにあります。読みたいストリームに変更できます。
使用するクラスは次のようになります。
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にパラメーターが欠落している場合は、追加できます。
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は以下のコードに応答を置き、データを取得します
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;
with
_@SerializedName("name")
public String name;
_
問題は、@SerializedName("count")
と@SerializedName("name")
の両方に_public String count;
_を使用していることだと思います
ありがとう。
これを試して:
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);
}
コードに欠けているものがたくさんあります。
以下のコードを見て、このコードを試してください。
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;
}
}
}
詳細については、これを見てください 例