Я пытаюсь сделать что-то вроде этого, но это не работает:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Но IDE говорит:
Непроверенное назначение
Map to Map<String,String>
Какой правильный способ сделать это? Я использую только Джексона, потому что это то, что уже доступно в проекте, есть ли собственный Java-способ преобразования в / из JSON?
В PHP я бы просто json_decode($str)
и вернулся бы массив. Мне нужно в основном то же самое здесь.
Ответы:
У меня есть следующий код:
Он читает из файла, но
mapper.readValue()
также приметInputStream
и вы можете получитьInputStream
из строки с помощью следующего:Есть немного больше объяснений о картографе в моем блоге .
источник
JsonFactory
не нужна.ObjectMapper
может создать его автоматически самостоятельно.Map<String, String>
и вы предоставилиMap<String, Object>
.mapper.writeValueAsString(hashmap)
Попробуй
TypeFactory
. Вот код для Джексона JSON (2.8.4).Вот код для старой версии Jackson JSON.
источник
Предупреждение, которое вы получаете, делается компилятором, а не библиотекой (или служебным методом).
Простейший способ использования Джексона напрямую:
Служебный метод, который вы вызываете, вероятно, просто делает что-то похожее на это.
источник
Map<String, String>
и вы предоставилиMap<String, Object>
.Обратите внимание, что
reader
экземпляр является потокобезопасным.источник
Map<String, String>
и вы предоставилиMap<String, Object>
.Преобразование из String в JSON Map:
источник
Type safety: The expression of type HashMap needs unchecked conversion to conform to Map<String,String>
. Хотя это можно подавить@SuppressWarnings
аннотацией, я бы порекомендовал использоватьTypeReference
первое или приведение к следующему, как упомянуто в Staxmanmap = mapper.readValue(string, map.getClass());
- учитывая, что вы создали экземпляр карты, как здесь.Я думаю, что это решит вашу проблему.
источник
Следующие работы для меня:
где
getJsonAsMap
определяется так:Обратите внимание, что это не удастся, если у вас есть дочерние объекты в вашем json (потому что они не являются a
String
, они являются другимиHashMap
), но будет работать, если ваш json является списком ключевых значений свойств следующим образом:источник
Используя Google Gson
Почему бы не использовать Google Gson, как упомянуто здесь ?
Очень прямолинейно и сделал работу за меня:
источник
Вот общее решение этой проблемы.
Надеюсь, что когда-нибудь кто-нибудь подумает создать метод util для преобразования в любой тип ключа / значения Map, отсюда и этот ответ :)
источник
просто хотел дать котлин ответ
источник