2015-01-14 2 views
0

Прежде всего, я новичок в Java, поэтому, пожалуйста, будьте добры со мной :-).Java MAP to JSON

У меня есть карта, и я хочу, чтобы разобрать в JSON объект:

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

My Key является Логин (адрес электронной почты) пользователя. Я хотел бы создать объект 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' 
    } 
} 

Если есть только одна очередь, поставив его в карта не нужна. Если вам нужно будет перебирать несколько карт, создайте JSONArray из очереди, а затем поместите JSONObject с ключом String as и значением 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; 
    } 
} 

карта после завершения будет содержать пустые очереди ... Это единственная проблема.