68

JSONObjectに変換したいいくつかの属性を持つ がありますMap<String, Object>

json.org または から使用できるものはありますかObjectMapper?

4

8 に答える 8

36

http://json.org/からJackson ( https://github.com/FasterXML/jackson ) を使用します。

HashMap<String,Object> result =
       new ObjectMapper().readValue(<JSON_OBJECT>, HashMap.class);
于 2014-02-04T05:59:02.387 に答える
1

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;
}
于 2021-09-26T01:00:33.790 に答える
1

これらの問題は、使用することで対処できることがわかりました

ObjectMapper#convertValue(Object fromValue, Class<T> toValueType)

その結果、元の質問は 2 段階の変換で解決できます。

  1. JSON をオブジェクトに逆マーシャリングします。bjectMapper#readValue() を使用しMap<String, Object>て、 が としてデマーシャリングされます。HashMap<String, LinkedHashMap>

  2. 内部の LinkedHashMaps を適切なオブジェクトに戻す

ObjectMapper mapper = new ObjectMapper(); Class clazz = (Class) Class.forName(classType); MyOwnObject value = mapper.convertValue(value, clazz);

<key, classNameString>「classType」を事前に知る必要があるのを防ぐために、マーシャリング中にペアを含む追加のマップを強制しました。そのため、アンマーシャリング時に、classType を動的に抽出できます。

于 2014-05-09T09:27:47.773 に答える