JSONObject를 맵으로 변환
나는 가지고 있다JSONObject
변환하고 싶은 Atribute가 있습니다.Map<String, Object>
json.org 또는 에서 사용할 수 있는 것이 있습니까?ObjectMapper
?
잭슨 사용에 문제가 있는 경우 Gson() (com.google.gson) 라이브러리를 사용할 수 있습니다.
//Martin Meeser가 제안한 대로 JsonObject.toString()을 JsonObject로 변경했습니다.
HashMap<String, Object> yourHashMap = new Gson().fromJson(yourJsonObject, HashMap.class);
Jackson ( http://json.org/ )를 사용합니다.
HashMap<String,Object> result =
new ObjectMapper().readValue(<JSON_OBJECT>, HashMap.class);
이것이 나에게 효과가 있었다.
public static Map<String, Object> toMap(JSONObject jsonobj) throws JSONException {
Map<String, Object> map = new HashMap<String, Object>();
Iterator<String> keys = jsonobj.keys();
while(keys.hasNext()) {
String key = keys.next();
Object value = jsonobj.get(key);
if (value instanceof JSONArray) {
value = toList((JSONArray) value);
} else if (value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
map.put(key, value);
} return map;
}
public static List<Object> toList(JSONArray array) throws JSONException {
List<Object> list = new ArrayList<Object>();
for(int i = 0; i < array.length(); i++) {
Object value = array.get(i);
if (value instanceof JSONArray) {
value = toList((JSONArray) value);
}
else if (value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
list.add(value);
} return list;
}
이 질문의 대부분은 다음과 같습니다.반복자 Java를 사용하여 모든 키에 대해 JSONObject를 새 Map으로 변환하는 방법
변환하는 가장 좋은 방법HashMap<String, Object>
이것은 다음과 같습니다.
HashMap<String, Object> result = new ObjectMapper().readValue(jsonString, new TypeReference<Map<String, Object>>(){}));
위 솔루션에 대한 주의사항(A Paul에서):이 솔루션은 HashMap < String, Object >를 재구축하지 않기 때문에 동작하지 않습니다.대신 HashMap < String, LinkedHashMap >을 만듭니다.
그 이유는 경계시 각 오브젝트(LinkedHashMap으로 마샬링된 JSON)가 그대로 사용되며 LinkedHashMap이 (LinkedHashMap을 적절한 오브젝트로 변환하는 것이 아니라)1 대 1로 사용되기 때문입니다.
HashMap < String, MyOwnObject > 를 사용하고 있는 경우는, 적절한 분계 처리를 실시할 수 있었습니다.다음의 예를 참조해 주세요.
ObjectMapper mapper = new ObjectMapper();
TypeFactory typeFactory = mapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(HashMap.class, String.class, MyOwnObject.class);
HashMap<String, MyOwnObject> map = mapper.readValue(new StringReader(hashTable.toString()), mapType);
그JSONObject
를 반환하는 메서드가 있습니다.Map<String,Object>
.
에서 사용되는 Maven 의존관계pom.xml
:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>current-version</version>
</dependency>
를 찾을 수 있습니다.current-version
여기 있습니다.
이러한 문제를 해결할 수 있는 방법은
ObjectMapper#convertValue(Object fromValue, Class<T> toValueType)
그 결과, 원래의 큐에스티온은 2단계 변환으로 해결할 수 있습니다.
JSON을 오브젝트로 돌려보내야 합니다.
Map<String, Object>
로서 구분된다.HashMap<String, LinkedHashMap>
bjectMapper#readValue()를 사용합니다.내부 LinkedHashMaps를 올바른 개체로 다시 변환합니다.
ObjectMapper mapper = new ObjectMapper(); Class clazz = (Class) Class.forName(classType); MyOwnObject value = mapper.convertValue(value, clazz);
'클래스'를 방지하려면Type'은 미리 알고 있어야 한다, 나는 mashalling 중에 다음을 포함하는 추가 맵이 추가되었다.<key, classNameString>
짝짓기. 그래서 놀라운 시간에, 학급은유형을 동적으로 추출할 수 있습니다.
코틀린에서는 이렇게 했어요.
mutableMapOf<String, Any>().apply {
jsonObj.keys().forEach { put(it, jsonObj[it]) }
}
import com.alibaba.fastjson.JSONObject;
Map<String, Object> map = new HashMap<String, Object>();
JSONObject rec = JSONObject.parseObject(<JSONString>);
map.put(rec.get("code").toString(), rec.get("value").toString());
언급URL : https://stackoverflow.com/questions/21544973/convert-jsonobject-to-map
'programing' 카테고리의 다른 글
"React가 Hooks 순서 변경을 감지했습니다." 그러나 Hooks가 순서대로 호출되는 것 같습니다. (0) | 2023.02.26 |
---|---|
angularjs는 입력 유효성 검사에 실패할 때 폼 제출을 방지합니다. (0) | 2023.02.26 |
워드프레스 플러그인 개발 - 이미지 사용 - 경로를 찾을 수 없습니다. (0) | 2023.02.26 |
리덕스 대 플레인 리액트 (0) | 2023.02.26 |
메시지를 로드하기 위한 ng-clock의 반대 (0) | 2023.02.26 |