2016-09-09 27 views
-1

下面是我試圖分析我的JSON數組的字符串:爲什麼Gson庫在JSON解析中給我一個異常?

[{"Phone_Number":"-9463232156","Fax_Number":"-","EmailID":"[email protected]","Established_Year":"1995","Recognized_Year":"0","Recognized_Number":"0","Affilation_Board_10":"PSEB","Affilation_Board_12":"","IsSchool_Shifts":"No","Medium_Code":"Punjabi"}] 

類BasicDetails.java

public class BasicDetails { 
    public String Phone_Number; 
    public String Fax_Number; 
    public String EmailID; 
    public String Established_Year; 
    public String Recognized_Year; 
    public String Recognized_Number; 
    public String Affilation_Board_10; 
    public String Affilation_Board_12; 

    public BasicDetails(String phone_Number, String fax_Number, String emailID, String established_Year, String recognized_Year, String recognized_Number, String affilation_Board_10, String affilation_Board_12, String isSchool_Shifts, String medium_Code) { 
     Phone_Number = phone_Number; 
     Fax_Number = fax_Number; 
     EmailID = emailID; 
     Established_Year = established_Year; 
     Recognized_Year = recognized_Year; 
     Recognized_Number = recognized_Number; 
     Affilation_Board_10 = affilation_Board_10; 
     Affilation_Board_12 = affilation_Board_12; 
     IsSchool_Shifts = isSchool_Shifts; 
     Medium_Code = medium_Code; 
    } 

    public String IsSchool_Shifts; 
    public String Medium_Code; 

    public String getPhone_Number() { 
     return Phone_Number; 
    } 

    public String getFax_Number() { 
     return Fax_Number; 
    } 

    public String getEmailID() { 
     return EmailID; 
    } 

    public String getEstablished_Year() { 
     return Established_Year; 
    } 

    public String getRecognized_Year() { 
     return Recognized_Year; 
    } 

    public String getRecognized_Number() { 
     return Recognized_Number; 
    } 

    public String getAffilation_Board_10() { 
     return Affilation_Board_10; 
    } 

    public String getAffilation_Board_12() { 
     return Affilation_Board_12; 
    } 

    public String getIsSchool_Shifts() { 
     return IsSchool_Shifts; 
    } 

    public String getMedium_Code() { 
     return Medium_Code; 
    } 
} 

類BasicDetailsList.java

public class BasicDetailsList { 
    public List<BasicDetails> basicDetailsArrayList; 

    public List<BasicDetails> getBasicDetailsArrayList() { 
     return basicDetailsArrayList; 
    } 

    public void setBasicDetailsArrayList(List<BasicDetails> basicDetailsArrayList) { 
     this.basicDetailsArrayList = basicDetailsArrayList; 
    } 

    public BasicDetailsList() { 
     basicDetailsArrayList = new ArrayList<BasicDetails>(); 
    } 
} 

以下是代碼,我我正在使用解析。 字符串變量r包含JSON數組

Gson gson=new GsonBuilder().create(); 
BasicDetailsList basicDetailsList=gson.fromJson(r,BasicDetailsList.class); 
       estd.setText(basicDetailsList.basicDetailsArrayList.get(0).Established_Year); 
        phone.setText(basicDetailsList.basicDetailsArrayList.get(0).Phone_Number); 
        fax.setText(basicDetailsList.basicDetailsArrayList.get(0).Fax_Number); 
        email.setText(basicDetailsList.basicDetailsArrayList.get(0).EmailID); 
        affiliation.setText(basicDetailsList.basicDetailsArrayList.get(0).Affilation_Board_10); 
        medium.setText(basicDetailsList.basicDetailsArrayList.get(0).Medium_Code); 
+3

什麼是錯誤? –

+0

請提供logcat –

+0

com.google.gson.jsonsyntax例外 –

回答

0
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.beginArray(); 
      while (reader.hasNext()) { 

       T cse = (T) gson.fromJson(reader, t.getClass()); 
       lcs.add(cse); 
      } 
      reader.endArray(); 
      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; 
    } 

使用此方法,並調用等作爲..

String response="[{ 
    "Phone_Number": "-9463232156", 
    "Fax_Number": "-", 
    "EmailID": "[email protected]", 
    "Established_Year": "1995", 
    "Recognized_Year": "0", 
    "Recognized_Number": "0", 
    "Affilation_Board_10": "PSEB", 
    "Affilation_Board_12": "", 
    "IsSchool_Shifts": "No", 
    "Medium_Code": "Punjabi" 
}]"; 



    ArrayList<BasicDetails> arrayListModel = JsonParse(
         new BasicDetails(), response); 

我希望它對你有用。

+0

謝謝diplai。它正在工作,但我仍然想知道爲什麼我以前的代碼不工作。 –

1

試試這個,你可以直接解析它作爲列表不需要創建另一個類爲它

Gson gson = new Gson(); 
String jsonOutput = "Your JSON String"; 
Type listType = new TypeToken<List<BasicDetails>>(){}.getType(); 
List<BasicDetails> basicDetailsList = (List<BasicDetails>) 
gson.fromJson(jsonOutput, listType); 
0

而不是

BasicDetailsList basicDetailsList=gson.fromJson(r,BasicDetailsList.class); 

請嘗試

Type listType= new TypeToken<List<BasicDetails>>(){}.getType(); 
List<BasicDetails> basicDetailsList=gson.fromJson(r,listType); 

既然你有基本的細節jsonArray,使用上面的方法,你可以降低你的代碼的類文件。但請確保在「r」中有json。