2015-01-14 60 views
0

首先,我是Java新手,所以請對我友好:-)。Java MAP to JSON

我有地圖,我想解析成JSON對象:

private static final Map<String, Queue<String>> myMap = new HashMap<String, Queue<String>>(); 

我的重點是用戶的登錄信息(電子郵件)。 我想創建一個JSON對象像這樣的:

{ 
    Login1: { 
     itemOne: 'item one', 
     itemTwo: 'item two' 
    }, 
    Login2: { 
     itemOne: 'item one', 
     itemTwo: 'item two' 
    } 
} 

我一直在使用的JSONObject或ObjectMapper嘗試過,但它並沒有奏效。我正在尋找一些提示/建議。

感謝,

+0

首先,您的JSON表示示例不正確。其次,你希望'Queue'中的值是密鑰的值嗎? –

回答

0

你現在的樣子,解析Map<String, Queue<String>>到有效的JSON意味着你會得到這樣的事情:

{ 
    queueOne: { 
    itemOne: 'item one', 
    itemTwo: 'item two' 
    }, 
    queueTwo: { 
    itemOne: 'item one', 
    itemTwo: 'item two' 
    } 
} 

如果只有一個隊列,把它在一個地圖是沒有必要的。如果有多個,你必須遍歷Map,從Queue創建一個JSONArray,然後把一個JSONObject作爲關鍵字和Queue作爲值放入主JSONArray中。

0

這很奇怪,但是您的地圖的關鍵從未在您的示例中使用。

完成的例子是:

{ 
    "key":{ 
    "item2":"SecondItemOnTheQueue", 
    "item1":"FirstItemOnTheQueue", 
    "item3":"ThirdItemOnTheQueue" 
    } 
} 

的Java代碼如下:

import java.util.HashMap; 
import java.util.LinkedList; 
import java.util.Map; 
import java.util.Queue; 

import org.json.JSONObject; 

public class App { 
    public static void main(String[] args) { 
     Map<String, Queue<String>> map = new HashMap<String, Queue<String>>(); 

     map.put("key", new LinkedList<String>(){{ 
      add("FirstItemOnTheQueue"); 
      add("SecondItemOnTheQueue"); 
      add("ThirdItemOnTheQueue"); 
     }}); 

     System.out.println(generateFromMapOfQueues(map)); 
    } 

    private static JSONObject generateFromMapOfQueues(Map<String, Queue<String>> map) { 
     JSONObject result = new JSONObject(); 


     for(String key : map.keySet()){ 
      JSONObject queueJson = new JSONObject(); 
      int initSize = map.get(key).size(); 
      for (int i = 0; i < initSize; i++) { 
       queueJson.append("item" + (i + 1), map.get(key).poll()); 
      } 
      result.put(key, queueJson); 
     } 

     return result; 
    } 
} 

完成後的地圖將包含空隊列......這是唯一的問題。