Jackson JSON을 사용 하여 JSON 문자열을 맵 으로 변환하는 방법
다음과 같은 작업을 수행하려고 하지만 작동하지 않습니다.
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
그러나 IDE에는 다음과 같이 표시됩니다.
선택되지 않은 할당
Map to Map<String,String>
어떻게 하면 좋을까요?Jackson만 사용하고 있는데, JSON으로 변환하는 네이티브 Java 방법은 없나요?
PHP에서는 간단하게json_decode($str)
어레이를 돌려받곤 했죠여기도 기본적으로 같은 것이 필요합니다.
【2020년 9월 갱신】여러 해 전의 답변이 도움이 되어 아직 표가 올라가고 있습니다만, 지금은 Google의 GSON 라이브러리를 사용하고 있습니다.
내 코드는 다음과 같습니다.
public void testJackson() throws IOException {
ObjectMapper mapper = new ObjectMapper();
File from = new File("albumnList.txt");
TypeReference<HashMap<String,Object>> typeRef
= new TypeReference<HashMap<String,Object>>() {};
HashMap<String,Object> o = mapper.readValue(from, typeRef);
System.out.println("Got " + o);
}
파일에서 읽는 건데mapper.readValue()
또한,InputStream
그리고 당신은 그것을 얻을 수 있습니다.InputStream
다음 명령을 사용하여 문자열에서 가져옵니다.
new ByteArrayInputStream(astring.getBytes("UTF-8"));
제 블로그에 매퍼에 대한 설명이 좀 더 있어요.
해라TypeFactory
Jackson JSON (2.8.4) 코드입니다.
Map<String, String> result;
ObjectMapper mapper;
TypeFactory factory;
MapType type;
factory = TypeFactory.defaultInstance();
type = factory.constructMapType(HashMap.class, String.class, String.class);
mapper = new ObjectMapper();
result = mapper.readValue(data, type);
Jackson JSON의 이전 버전 코드입니다.
Map<String, String> result = new ObjectMapper().readValue(
data, TypeFactory.mapType(HashMap.class, String.class, String.class));
경고는 라이브러리(또는 유틸리티 방식)가 아닌 컴파일러에 의해 수행됩니다.
Jackson을 직접 사용하는 가장 간단한 방법은 다음과 같습니다.
HashMap<String,Object> props;
// src is a File, InputStream, String or such
props = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});
// or:
props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);
// or even just:
@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmless
props = new ObjectMapper().readValue(src, HashMap.class);
당신이 말하는 유틸리티 방식은 아마도 이것과 비슷한 일을 할 것입니다.
ObjectReader reader = new ObjectMapper().readerFor(Map.class);
Map<String, String> map = reader.readValue("{\"foo\":\"val\"}");
주의:reader
인스턴스는 스레드 세이프입니다.
문자열에서 JSON 맵으로의 변환:
Map<String,String> map = new HashMap<String,String>();
ObjectMapper mapper = new ObjectMapper();
map = mapper.readValue(string, HashMap.class);
JavaType javaType = objectMapper.getTypeFactory().constructParameterizedType(Map.class, Key.class, Value.class);
Map<Key, Value> map=objectMapper.readValue(jsonStr, javaType);
이게 너의 문제를 해결할 수 있을 것 같아.
다음 사항이 효과적입니다.
Map<String, String> propertyMap = getJsonAsMap(json);
어디에getJsonAsMap
는 다음과 같이 정의됩니다.
public HashMap<String, String> getJsonAsMap(String json)
{
try
{
ObjectMapper mapper = new ObjectMapper();
TypeReference<Map<String,String>> typeRef = new TypeReference<Map<String,String>>() {};
HashMap<String, String> result = mapper.readValue(json, typeRef);
return result;
}
catch (Exception e)
{
throw new RuntimeException("Couldnt parse json:" + json, e);
}
}
json에 하위 객체가 있는 경우(이러한 객체는 non-to-to-to-to-to-to-to-to-toString
, 그들은 별개이다.HashMap
단, json이 다음과 같은 속성의 주요 값 목록일 경우 작동합니다.
{
"client_id": "my super id",
"exp": 1481918304,
"iat": "1450382274",
"url": "http://www.example.com"
}
그냥 코틀린에게 대답하고 싶었어
val propertyMap = objectMapper.readValue<Map<String,String>>(properties, object : TypeReference<Map<String, String>>() {})
Google의 Gson 사용
여기에 나와 있는 Google의 Gson을 사용해 보는 것은 어떨까요?
매우 직설적이고 나를 위해 일을 해 주었다.
HashMap<String,String> map = new Gson().fromJson( yourJsonString, new TypeToken<HashMap<String, String>>(){}.getType());
다음은 이 문제에 대한 일반적인 해결책입니다.
public static <K extends Object, V extends Object> Map<K, V> getJsonAsMap(String json, K key, V value) {
try {
ObjectMapper mapper = new ObjectMapper();
TypeReference<Map<K, V>> typeRef = new TypeReference<Map<K, V>>() {
};
return mapper.readValue(json, typeRef);
} catch (Exception e) {
throw new RuntimeException("Couldnt parse json:" + json, e);
}
}
언젠가 누군가가 키/값 타입의 맵으로 변환하기 위한 util 메서드를 만들 수 있기를 바랍니다.그러면 다음과 같은 답이 나옵니다.
코틀린의 샘플 코드.
class HeathCheckController {
fun get(): Any {
val config = this::class.java.getResource("/git-info.yml")?.readText()
return ObjectMapper()
.readValue(config, Map::class.java)
}
}
그라들
val jackson = "2.13.2"
언급URL : https://stackoverflow.com/questions/2525042/how-to-convert-a-json-string-to-a-mapstring-string-with-jackson-json
'programing' 카테고리의 다른 글
Linux에서 C 프로그래밍 언어의 헤더 파일을 찾으려면 어떻게 해야 하나요? (0) | 2022.08.17 |
---|---|
element-ui(현재는 element-plus)를 Vue3 프로젝트에 추가하려면 어떻게 해야 합니까? (0) | 2022.08.17 |
계산된 속성에 예기치 않은 부작용이 있습니다. (0) | 2022.08.17 |
VueX 및 NuxtJ의 지속 상태s (0) | 2022.08.16 |
푸셔가 정의되지 않았습니다!Laravel 5.4 (Laravel Echo 포함) (0) | 2022.08.16 |