2014-10-10 53 views
-1

這是我從服務器獲取我的JSON響應,如何使用Google GSON庫解析下面的json?

{ 
"awards": [ 
    "31", 
    "33", 
    "44", 
    "45", 
    "46", 
    "48" 
] 
} 

,但是當我嘗試使用下面的代碼

@SerializedName("awards") 
    private UserAwards[] awards; 

    public class UserAwards { 

    } 

它給了我以下異常解析它:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 247. 

請幫我找到它如何解析這個。

+0

'awards'是JSON數組。顯示你的完整代碼 – Gattsu 2014-10-10 06:56:01

+0

@Shiv看看我的答案。 – GrIsHu 2014-10-10 07:06:41

回答

0

檢查這個link,如果你不能自己做json來反對。

import java.util.ArrayList; 
import java.util.List; 
import javax.annotation.Generated; 
import javax.validation.Valid; 
import com.google.gson.annotations.Expose; 

@Generated("org.jsonschema2pojo") 
public class UserAwards { 

    @Expose 
    @Valid 
    private List<String> awards = new ArrayList<String>(); 

    public List<String> getAwards() { 
     return awards; 
    } 

    public void setAwards(List<String> awards) { 
     this.awards = awards; 
    } 

} 
0

這是解析:

Gson gson = new GsonBuilder().setFieldNamingPolicy(
         FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); 
userAwards= gson.fromJson(jsonResponse.toString(), UserAwards.class); 

和你的類應該看起來像

public class UserAwards{ 

    @Expose 
    private ArrayList<String> awards; 
} 

加上添加set和get方法:)

0

如下解析它:

private void parseResponse(final Reader p_response) { 
    m_handler.post(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      if (p_response != null) { 
       Gson m_gson = new GsonBuilder().setFieldNamingStrategy(
         FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); 
       UserAwards m_details = m_gson.fromJson(p_response, 
         UserAwards.class); 
       if (m_details != null) { 

         for (int i = 0; i < m_details.awards.length; i++) { 
         System.err.println("IDs======" 
           + m_details.awards[i].toString()); 
         } 
        } 

也會使你的POJO類,如下:

public class UserAwards { 

    public List<String> awards = new ArrayList<String>(); 
}