2012-11-06 107 views
0

我遇到了這個JSON問題。Android Json/Gson問題

{"directory": { 
     "employees": {"employee": [ 
      { 
       "field": [ 
        { 
         "content": "Charlotte Abbott", 
         "id": "displayName" 
        }, 
        { 
         "content": "Charlotte", 
         "id": "firstName" 
        }, 

我鑄造成一個類,它看起來像這樣

@SerializedName("directory") 
    public Directory directory; 

    public class Directory 
    { 
     @SerializedName("employees") 
     public Employees employees; 
    } 
    public class Employees 
    { 
     @SerializedName("employee") 
     public List<Employee> employee; 
    } 

    public class Employee 
    { 
     @SerializedName("field") 
     public List<Fields> fields; 

     @SerializedName("id") 
     public String employeeId; 
    } 
    public class Fields 
    { 
     @SerializedName("content") 
     public String content; 

     @SerializedName("id") 
     public String label; 
    } 

而且它沒有達到所有的變量時,其序列插入數據。相反,我得到所有的空值。然而,我得到了正確數量的目錄對象(數量),所以我知道它達到了那麼遠。任何人都有一些洞察我在這裏做錯了什麼? json就是這樣,我沒有設計它,但它是如何使用的。

+0

您是否期待目錄中只有一個'employees'? –

+0

不可能有多達10,000個,或少至1個 – WIllJBD

+0

您是否正在獲得適量的目錄對象?在這個JSON配置中,只能有一個這樣的對象,和員工一樣。我會認爲這些應該是對象的數組,而不僅僅是對象。您應該確保JSON結構符合您的需求。 –

回答

2

相當奇怪的數據,你有工作結構,但這裏是它。

public class App { 
    public static void main(String[] args) { 
     Gson gson = new Gson(); 
     String jsonString = "{\"directory\": {\"employees\": {\"employee\": [{\"field\": [{\"content\": \"Charlotte Abbott\",\"id\": \"displayName\"},{\"content\": \"Charlotte\",\"id\": \"firstName\"}]}]}}}"; 

     Wrapper obj = (Wrapper) gson.fromJson(jsonString, Wrapper.class); 

     System.out.println(obj.getDirectory().getEmployees().getEmployeeList() 
       .get(0).getFieldList().get(0).getContent()); 
    } 
} 

你需要一個Wrapper類環繞Directory

public class Wrapper { 
    private Directory directory; 

    public Directory getDirectory() { 
     return directory; 
    } 

    public void setDirectory(Directory directory) { 
     this.directory = directory; 
    } 
} 

Directory class。

public class Directory { 
    @SerializedName("employees") 
    private Employees employees; 

    public Employees getEmployees() { 
     return employees; 
    } 

    public void setEmployees(Employees employees) { 
     this.employees = employees; 
    } 
} 

Employees類:

public class Employees { 
    @SerializedName("employee") 
    private List<Employee> employeeList; 

    public List<Employee> getEmployeeList() { 
     return employeeList; 
    } 

    public void setEmployeeList(List<Employee> employeeList) { 
     this.employeeList = employeeList; 
    } 
} 

Employee類:

public class Employee { 
    @SerializedName("field") 
    private List<Field> fieldList; 

    public List<Field> getFieldList() { 
     return fieldList; 
    } 

    public void setFieldList(List<Field> fieldList) { 
     this.fieldList = fieldList; 
    } 
} 

Field類:

public class Field { 
    @SerializedName("content") 
    private String content; 
    @SerializedName("id") 
    private String id; 

    public String getContent() { 
     return content; 
    } 

    public void setContent(String content) { 
     this.content = content; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 
} 

看到一個JSON到Java Objec t在這裏使用GSON示例:http://java.sg/parsing-a-json-string-into-an-object-with-gson-easily/

+0

我做了一個完全不同的方式,它的工作很好,但這可能是一個更好的解決方案,然後我的:)我會給它一個好看:)謝謝。 – WIllJBD

+0

@WIllJBD很棒:D你應該分享你的解決方案,分享。 –

0

因此,這裏是如何制定出來的,我說得對,我只是沒有正確地驗證數據被放置在後,所以我被不能夠分配給它,它存儲失去它以後訪問。

這是醜陋的,但地圖上看起來是這樣的

DIRECTORY obj 
{ 
    EMPLOYEES obj 
    { 
     List employee [] 
     { 
      int id 
      List fields[] 
      { 
       content 
       id 
      {  
     {  
    { 
{