2014-03-05 27 views
0

我有一個多重映射與以下值:如何在不同的JSON數組之間「拆分」Map值?

A = 1,B = 2,C = 3

我想出來的它在以下格式來創建JSON:

[{"data":["a","b","c"],"StaticData":"HELLO"},{"Categories":[1,2,3]}] 

我正在嘗試使用字符串緩衝區但我完全失去了如何將循環僅用於鍵和值以及如何在中間插入一些靜態數據。

我想如果我能先創建一個字符串,並在後面的JSON格式解析或有任何其他的方式,形成一個JSON?

+1

請修復您的預期輸出。這是目前無效的JSON。沒有我知道的JSON庫能夠自動分析'MultiMap'並生成所需的格式。你需要自己序列化它。 –

+0

對不起..只是修復它 – user2093576

+0

不要使用JSON的「字符串構建」。使用JSON庫。 – user2864740

回答

1

首先遍歷你的HashMap來獲取鍵和值並將其存儲在列表中。創建兩個包含Key和List的類,其他包含List的Category。在類對象中設置值,創建一個List並將此類的兩個對象添加到列表中,並將此列表序列化爲JSON。

我對onvert對象轉換成JSON字符串使用Gson Library

這裏是你想要的代碼。

DATACLASS:

public class DataClass { 
    private List<String> data; 
    private String StaticData; 
    //your getter and setter method. 
} 

CategoryClass:

public class CategoryClass { 
    private List<String> Categories; 
    //your getter and setter method 
} 

識別TestClass:

public static void main(String[] args) { 
    try{ 
     Map<String, String> map = new HashMap<String, String>(); 
     map.put("a", "1"); 
     map.put("b", "2"); 
     map.put("c", "3"); 

     List<Object> obj = new ArrayList<Object>(); 


     List<String> keys = new ArrayList<String>(); 
     List<String> values = new ArrayList<String>(); 

     for(Entry<String, String> myMap : map.entrySet()){ 
      keys.add(myMap.getKey()); 
      values.add(myMap.getValue()); 
     } 

     DataClass dataObj = new DataClass(); 
     dataObj.setData(keys); 
     dataObj.setStaticData("HELLO"); 
     obj.add(dataObj); 

     CategoryClass catObj = new CategoryClass(); 
     catObj.setCategories(values); 
     obj.add(catObj); 

     Gson gson = new Gson(); 
     String jsonStr = gson.toJson(obj); 
     System.out.println(jsonStr); 
    } 
    catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
} 

輸出:

[{"data":["b","c","a"],"StaticData":"HELLO"},{"Categories":["2","3","1"]}]  

編輯:

如果你需要保持在MAP插入的順序不是使用LinkedHashMap所以鍵和值的是公共秩序是相同地圖插件。