Próbuję zrobić coś takiego, ale to nie działa:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Ale IDE mówi:
Niesprawdzone przypisanie
Map to Map<String,String>
Jak to zrobić? Używam tylko Jacksona, ponieważ to jest już dostępne w projekcie, czy istnieje natywny sposób konwersji Java do / z JSON?
W PHP po prostu json_decode($str)
bym zwrócił tablicę. Potrzebuję tu w zasadzie tej samej rzeczy.
Odpowiedzi:
Mam następujący kod:
Odczytuje z pliku, ale
mapper.readValue()
akceptuje również ciąg znakówInputStream
i można go uzyskać,InputStream
korzystając z następujących poleceń :Na moim blogu jest trochę więcej wyjaśnień na temat mapera .
źródło
JsonFactory
nie jest potrzebna.ObjectMapper
może utworzyć go samodzielnie.Map<String, String>
a ty dostarczyłeśMap<String, Object>
.mapper.writeValueAsString(hashmap)
Spróbować
TypeFactory
. Oto kod dla Jackson JSON (2.8.4).Oto kod starszej wersji Jackson JSON.
źródło
Ostrzeżenie pojawia się przy użyciu kompilatora, a nie biblioteki (lub metody narzędziowej).
Najprostszym sposobem bezpośredniego użycia Jacksona byłoby:
Wywołana metoda narzędziowa prawdopodobnie robi coś podobnego do tego.
źródło
Map<String, String>
i podaszMap<String, Object>
.Pamiętaj, że
reader
instancja jest Bezpieczna dla wątków.źródło
Map<String, String>
i podaszMap<String, Object>
.Konwertowanie z ciągu na mapę JSON:
źródło
Type safety: The expression of type HashMap needs unchecked conversion to conform to Map<String,String>
. Chociaż można to stłumić za pomocą@SuppressWarnings
adnotacji, polecam użycieTypeReference
pierwszego lub castingowania następnego, o czym wspomniał Staxmanmap = mapper.readValue(string, map.getClass());
- pod warunkiem, że utworzyłeś instancję mapy, jak ma to miejsce w tym przypadku.myślę, że to rozwiąże twój problem.
źródło
Poniższe działa dla mnie:
gdzie
getJsonAsMap
jest zdefiniowane tak:Zauważ, że to się nie powiedzie, jeśli masz obiekty potomne w swoim Jsonie (ponieważ nie są one
String
, to inneHashMap
), ale zadziała, jeśli twój Json jest listą kluczowych wartości właściwości takich jak:źródło
Korzystanie z Google Gson
Dlaczego nie skorzystać z Google Gson, jak wspomniano tutaj ?
Bardzo prosto i wykonałem dla mnie pracę:
źródło
Oto ogólne rozwiązanie tego problemu.
Mam nadzieję, że pewnego dnia ktoś pomyśli o stworzeniu metody util do konwersji na dowolny klucz / wartość typu mapy, stąd ta odpowiedź :)
źródło
chciałem tylko dać odpowiedź Kotlin
źródło