Вопрос:

Как разобрать анализ JSON Использование GSON в Android

java android json gson

44937 просмотра

5 ответа

8890 Репутация автора

Я использую 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;
}

Я использую метод ниже для анализа этих данных 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
Автор: dipali Источник Размещён: 31.03.2014 04:35

Ответы (5)


3 плюса

8256 Репутация автора

замещать

@SerializedName("name") public String count; с участием

@SerializedName("name")
public String name;

Я думаю, проблема в том, что вы используете public String count;для обоих @SerializedName("count")и@SerializedName("name")

Благодарю.

Автор: Siddharth_Vyas Размещён: 31.03.2014 04:40

0 плюса

32574 Репутация автора

В вашем коде много чего не хватает ..

Пожалуйста, посмотрите на код ниже и попробуйте этот код ..

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;
        }
    }

}

Для более подробной информации посмотрите на этот пример

Автор: Niranj Patel Размещён: 31.03.2014 05:01

18 плюса

5790 Репутация автора

Вы можете попробовать прочитать значение 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();
 }

Предполагая, что вы просто получаете этот один блок, а не список. А также эти данные в настоящее время находятся в файле в папке активов. Вы можете изменить его на поток, из которого хотите прочитать.

Класс, который вы используете, должен выглядеть так:

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 вам придется преобразовать его в форму utf-8 в ответе самого http.

Вы можете попробовать использовать:

String jsonString = new Gson().toJson(objectToEncode);
byte[] utf8JsonString = jsonString.getBytes("UTF8");
responseToClient.write(utf8JsonString, 0, utf8JsonString.Length);
Автор: Rat-a-tat-a-tat Ratatouille Размещён: 31.03.2014 05:31

1 плюс

11 Репутация автора

Попробуй это:

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);
}
Автор: rahul gupta Размещён: 02.08.2016 02:33

7 плюса

1548 Репутация автора

Здравствуйте, используйте ниже Gradle Lib

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

Json Class

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();

}

надеюсь, это поможет вам ..

Автор: Sanjay Bhalani Размещён: 04.10.2016 09:18
Вопросы из категории :
32x32