JSONObject
に変換したいいくつかの属性を持つ がありますMap<String, Object>
json.org または から使用できるものはありますかObjectMapper
?
JSONObject
に変換したいいくつかの属性を持つ がありますMap<String, Object>
json.org または から使用できるものはありますかObjectMapper
?
http://json.org/からJackson ( https://github.com/FasterXML/jackson ) を使用します。
HashMap<String,Object> result =
new ObjectMapper().readValue(<JSON_OBJECT>, HashMap.class);
20160810 以降org.json:json
のアーティファクトのバージョンには、GitHubのリリース履歴に従ってメソッドが含まれています。JSONObject.toMap()
toMap()
メソッドはここで入手でき、簡単に適応できます。
public Map<String, Object> toMap() {
Map<String, Object> results = new HashMap<String, Object>();
for (Entry<String, Object> entry : this.entrySet()) {
Object value;
if (entry.getValue() == null || NULL.equals(entry.getValue())) {
value = null;
} else if (entry.getValue() instanceof JSONObject) {
value = ((JSONObject) entry.getValue()).toMap();
} else if (entry.getValue() instanceof JSONArray) {
value = ((JSONArray) entry.getValue()).toList();
} else {
value = entry.getValue();
}
results.put(entry.getKey(), value);
}
return results;
}
これらの問題は、使用することで対処できることがわかりました
ObjectMapper#convertValue(Object fromValue, Class<T> toValueType)
その結果、元の質問は 2 段階の変換で解決できます。
JSON をオブジェクトに逆マーシャリングします。bjectMapper#readValue() を使用しMap<String, Object>
て、 が としてデマーシャリングされます。HashMap<String, LinkedHashMap>
内部の LinkedHashMaps を適切なオブジェクトに戻す
ObjectMapper mapper = new ObjectMapper();
Class clazz = (Class) Class.forName(classType);
MyOwnObject value = mapper.convertValue(value, clazz);
<key, classNameString>
「classType」を事前に知る必要があるのを防ぐために、マーシャリング中にペアを含む追加のマップを強制しました。そのため、アンマーシャリング時に、classType を動的に抽出できます。