0

メソッド「Json to HashTable」とその逆を作成しました。「Java」には連想配列がないため、HashTable を使用します。私の問題は、json に配列がある場合です。これは、「Java」から HashTable の配列を意味します:/ はまったく機能しませんが、解決策は「List >」を使用することだと思います...

これはやや複雑だと思います。何か助けはありますか?それは難しいですか、それとも私も複雑ですか?

JSON の例:

{"Config":[{"Name":"method1","Uses":"0","Event":["Start","Play"],"Action":{"Class":"Ads","Options":{"Class":"Webview","Url":"http:\/\/test.com\/action.php","Time":"10"}}},{"Name":"method2","Uses":"12","Event":["Loading"],"MaxTimes":"5","Options":{"Class":"Ads"}}]}

表示: http://json.parser.online.fr/

私のコード:

public Hashtable<?, ?> JSonDecode(String data) {
        Hashtable<String, Object> htJS = new Hashtable<String, Object>();
        try {
            JSONObject objJS = new JSONObject(data);
            Iterator<String> it = objJS.keys();
            String key = null;
            Object value = null;
            while (it.hasNext()) {
                key = it.next();
                value = objJS.get(key);
                if (value instanceof JSONObject) {
                    value = JSonObjectToHashtable(value.toString());
                }
                if (value instanceof JSONArray) {
                    value = JSonArrayToHashtable(value.toString());

                }
                htJS.put((String) key, value);
            }
        } catch (JSONException e) {
            e.printStackTrace();
            // No valid json
            return null;
        }
        return htJS;
    }

public Hashtable<?, ?> JSonObjectToHashtable(String data) {
        Hashtable<String, Object> htJS = new Hashtable<String, Object>();
        JSONObject objJS;
        try {
            objJS = new JSONObject(data);
            Iterator<String> it = objJS.keys();
            String key = null;
            Object value = null;
            while (it.hasNext()) {
                key = it.next();
                value = objJS.get(key);
                if (value instanceof JSONObject) {
                    value = JSonObjectToHashtable(value.toString());
                }
                htJS.put((String) key, value);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return htJS;
    }

public List<Map<String, Object>> JSonArrayToHashtable(String data) {
        List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>();
        Map<String,Object> entry = new HashMap<String,Object>();
        JSONArray objJSA;

        try {
            objJSA = new JSONArray(data);
            for (int i = 0; i < objJSA.length(); i++) {
                JSONObject objJS = objJSA.getJSONObject(i);
                Iterator<String> it = objJS.keys();
                String key = null;
                Object value = null;
                while (it.hasNext()) {
                    key = it.next();
                    value = objJS.get(key);
                    if (value instanceof JSONObject) {
                        value = JSonObjectToHashtable(value.toString());
                    }
                    entry.put((String) key, value);
                }
                listMap.add(entry);
                entry = new HashMap<String,Object>();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return listMap;
    }
4

1 に答える 1

0

Map (Hashtable) API は JSONObject API に似ています。アプリケーションが一貫して Maps を使用しない限り、JSONObject を Map に変換する必要はありません。

JSONObject を Map に変換する必要がある場合、Map の型Map<String, Object>は で、Object は次のいずれかの型になります。

  • プリミティブ (整数、浮動小数点数など)
  • 地図
  • 上記のツリー タイプのコレクション (配列、リストなど)
于 2013-06-02T21:53:52.490 に答える