2015-05-17 145 views
1

我很難理解GSON是否可以默認處理這種json,或者我需要爲每個子元素實現反序列化器。GSON解析嵌套數組

JSON輸入

{ 
    "services":[ 
     { 
     "id": 2, 
     "name": "Buy" 
     }, 
     { 
     "id": 3, 
     "name": "Sell" 
     } 
     ] 
    "status": { 
     "code": 0, 
     "message": "" 
    } 
} 

對我而言最好的情況下,結果是有下面的類包含所有數據

的java [POJO]

public class Services { 
    public List<ServiceItem> services; 
    public Status status; 

    public class ServiceItem { 
     public int id; 
     public String name; 
    } 

    public class Status { 
     public int code; 
     public String message; 
    } 
} 

是有可能讓GSON的課程和JSON只是讓它工作?或者我需要爲每個子類創建反序列化器?

+0

無效JSON – Hector

回答

2

糾正你的JSON輸入如下(你忘了之前status場逗號)

{ 
    "services":[ 
     { 
     "id": 2, 
     "name": "Buy" 
     }, 
     { 
     "id": 3, 
     "name": "Sell" 
     } 
     ], 
    "status": { 
     "code": 0, 
     "message": "" 
    } 
} 

然後讓我們看看你的類如下

public class Services { 
    public List<ServiceItem> services; 
    public Status status; 
    // getters and setters 
    @Override 
    public String toString() { 
     return "["+services.toString()+status.toString()+"]"; 
    } 

    public class ServiceItem { 
     public int id; 
     public String name; 
     // getters and setters 
     @Override 
     public String toString() { 
      return "("+id+","+name+")"; 
     } 

    } 

    public class Status { 
     public int code; 
     public String message; 
     // getters and setters 
     @Override 
     public String toString() { 
      return ",("+code+","+message+")"; 
     } 
    } 
} 

如果輸入的是文件jsonInput.json然後

Gson gson = new Gson(); 
Services data = gson.fromJson(new BufferedReader(new FileReader(
     "jsonInput.json")), new TypeToken<Services>() { 
}.getType()); 
System.out.println(data); 

如果輸入是一個JSON字符串jsonInput然後

Gson gson = new Gson(); 
Services data = gson.fromJson(jsonInput, Services.class); 
System.out.println(data); 

輸出:

[[(2,Buy), (3,Sell)],(0,)]