2017-03-07 70 views
-2

我該如何分別將「id」和「name」的值分別存儲爲HashMap<Integer, String>Gson - 如何存儲屬性和值

目前,傾銷出pseudoStations給我[{"id":0,"name":"London"}, {"id":1,"name":"Nottingham"}]。遍歷遍歷只會給我一個JsonObject爲每個列表元素。

主類

public static void main(String[] args) { 
    Gson gson = new Gson(); 
    BufferedReader br = null; 

    try { 
     br = new BufferedReader(new FileReader("stations.json")); 
     StationManager sm = gson.fromJson(br, StationManager.class); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      closeBufferedReader(br); 
     } 
    } 
} 

站管理類

public class StationManager { 
    @SerializedName("pseudoStations") 
    @Expose 
    private List<JsonObject> pseudoStations = null; 

    public void setPseudoStations(List<JsonObject> pseudoStations) { 
     this.pseudoStations = pseudoStations; 
    } 
} 

stations.json

{ 
    "pseudoStations":[ 
    { 
     "id": 0, 
     "name": "London" 
    }, 
    { 
     "id": 1, 
     "name": "Nottingham" 
    } 
    ] 
} 
+1

我不明白你爲什麼認爲你需要'HashMap <整數,字符串>'或者如何能夠存儲'id'和'name'鍵值對。使用與這些名稱相對應的兩個字段創建一個POJO。並且將你的'pseudoStations'改爲該POJO的'List'。 –

+0

創建一個具有屬性name和id的Class Station並將Json映射到該類上爲Json中的每個工作站創建一個新的類的實例 – Mero

回答

0

您可以循環通過量h來自StationManager的JSONObject列表,並將數據添加到HashMap。

public static void main(String[] args) { 
    Map<Integer, String> output = new HashMap<Integer, String>(); 
    Gson gson = new Gson(); 
    BufferedReader br = null; 

    try { 
     br = new BufferedReader(new FileReader("stations.json")); 
     StationManager sm = gson.fromJson(br, StationManager.class); 
     List<JsonObject> listOfObjs = sm.getPseudoStations(); 
     for(JsonObject obj: listOfObjs){ 
      output.put(obj.getInt("id"), obj.getString("name")); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      closeBufferedReader(br); 
     } 
    } 
}