2013-04-18 23 views
1

我打电话给一个服务,它将响应作为json返回,并使用Gson将它们转换为Java对象。在47 50的情况下,我在的情况下,3但是获得Java对象,我得到以下错误:这是失败可以看到这里解析json到java对象时出错:期望编号,得到字符串

com.google.gson.JsonSyntaxException: Expecting number, got: STRING 
    at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:304) 
    at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:293) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) 
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81) 
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172) 
    at com.google.gson.Gson.fromJson(Gson.java:795) 
    at com.google.gson.Gson.fromJson(Gson.java:761) 
    at com.google.gson.Gson.fromJson(Gson.java:710) 
    at com.google.gson.Gson.fromJson(Gson.java:682) 

一个JSON响应:http://ec2-50-112-212-186.us-west-2.compute.amazonaws.com/ske.json。我的Java bean如下:

import java.util.List; 

import com.google.gson.annotations.SerializedName; 

public class WordSketch{ 

    @SerializedName("Gramrels") 
    private List<Gramrel> gramrels; 

    public List<Gramrel> getGramrels(){ 
     return this.gramrels; 
    } 
    public void setGramrels(List<Gramrel> gramrels){ 
     this.gramrels = gramrels; 
    } 

    public static class Gramrel { 

     @SerializedName("Words") 
     private List<Word> words; 
     private Number count; 
     private String name; 
     private Number score; 
     private Number seek; 

     public List<Word> getWords(){ 
      return this.words; 
     } 
     public void setWords(List<Word> words){ 
      this.words = words; 
     } 
     public Number getCount(){ 
      return this.count; 
     } 
     public void setCount(Number count){ 
      this.count = count; 
     } 
     public String getName(){ 
      return this.name; 
     } 
     public void setName(String name){ 
      this.name = name; 
     } 
     public Number getScore(){ 
      return this.score; 
     } 
     public void setScore(Number score){ 
      this.score = score; 
     } 
     public Number getSeek(){ 
      return this.seek; 
     } 
     public void setSeek(Number seek){ 
      this.seek = seek; 
     } 
    } 

    public static class Word { 
     private Number count; 
     private Number id; 
     private String lempos; 
     private Number score; 
     private Number seek; 
     private String word; 

     public Number getCount(){ 
      return this.count; 
     } 
     public void setCount(Number count){ 
      this.count = count; 
     } 
     public Number getId(){ 
      return this.id; 
     } 
     public void setId(Number id){ 
      this.id = id; 
     } 
     public String getLempos(){ 
      return this.lempos; 
     } 
     public void setLempos(String lempos){ 
      this.lempos = lempos; 
     } 
     public Number getScore(){ 
      return this.score; 
     } 
     public void setScore(Number score){ 
      this.score = score; 
     } 
     public Number getSeek(){ 
      return this.seek; 
     } 
     public void setSeek(Number seek){ 
      this.seek = seek; 
     } 
     public String getWord(){ 
      return this.word; 
     } 
     public void setWord(String word){ 
      this.word = word; 
     } 
    } 
} 

与实际GSON呼叫gson.fromJson(json, WordSketch.class)

任何人都可以指出什么是错误的,或者至少让我知道如何调试(快速),因为我不知道在哪个部分的JSON,GSON失败?

非常感谢,

回答

3

通过观察你的JSON,我已经意识到有些领域,通常有一个数值,其他时候,他们有一个空字符串值。

例如,第三gramrel的回应是:

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

在你的类,你定义countNumberscore,GSON抱怨!


编辑:我建议你在你的类中的所有领域成为String类型的,然后你可以将它作为你需要......我的意思是,你可以用你写就像类一个响应包类,然后从响应类来创建你实际的类...

WordSketch ws = gson.fromJson(json, WordSketch.class); 
for (Gramrel g in ws.getGramrels) { 
    Number count = //convert the String into Number... 
    //etc... 
    MyGrammel myGrammel = new MyGrammel(count, ...); 
} 

在这个例子中,你Gramrel类只是一个临时的类包装响应,并MyGramrel是您将使用的实际类(具有类型为Number的属性的类)....

+0

hmm ic。 10倍!最好把所有东西都改成string然后我猜,然后解析成一个数字?确切地说, –

+0

!这正是我在编辑中写的东西...... :) – MikO