2014-11-25 3 views
0

У меня возникла проблема при сериализации карты карт (или списков) в JSON. Это может быть до любого уровня. Я использую GSON для преобразования карты в JSON, но я не получаю желаемый результат. Рассмотрим пример ниже:Как сериализовать сложную карту в java для JSON

Map<String, String> map = new HashMap<String, String>(); 
map.put("key1", "value1"); 
map.put("key2", new ArrayList<String>(){{add("value2");add("value3");}}); 

Когда я сериализации эту карту, я получаю следующий вывод:

{ 
"key1" : "value1", 
"key2" : "[value2, value3]" 
} 

Это становится хуже, когда у меня есть карта в карте. Выход, который я хочу:

{ 
    "key1" : "value1", 
    "key2" : ["value2", "value3"] 
} 

Любая идея, как получить такой выход? Я уже пробовал ObjectMapper и GsonBuilder.registerTypeAdapter, но пока не добился успеха.

Заранее спасибо.

+0

'Карта map = new HashMap <>(); map.put («ключ1», «значение1»); map.put ("key2", Arrays.asList ("value2", "value3")); String json = new Gson(). ToJson (map) 'отлично работает. –

ответ

2

Я не думаю, что это действительно так, чтобы хранить ArrayList в HashMap, где ожидается String. Я бы сказал, что этот код не сработает, но я предполагаю, что он должен преуспеть, так как он не терпит неудачу, и поэтому я предполагаю, что когда вы вставляете его в HashMap Java, на самом деле вызывается toString () на нем за кулисами, чтобы передать его в String. Таким образом, значение, находящееся в HashMap, на самом деле не является массивом; это была строка с момента ее вставки. Таким образом, вы теряете информацию, которая не может быть спасена после потери.

+0

удар по сэру! Карта была динамически сгенерирована из программы, и в какой-то момент toString() использовалась при наборе списка на карту. Я удалил это toString(), и теперь код работает нормально! Спасибо за замечательный ответ! – user3968762

+0

И да, моя карта имеет , а не . Я сделал ошибку, поставив вопрос. Я должен сказать, что это замаскированное благословение. – user3968762

Смежные вопросы