Java Android中的Json/JsonArray到哈希表/列表

Java Android中的Json/JsonArray到哈希表/列表,java,android,json,hashtable,arrays,Java,Android,Json,Hashtable,Arrays,我创建了一个方法“Json到哈希表”,反之亦然。我使用哈希表是因为“Java”中没有关联数组。我现在的问题是当json中有一个数组时。这意味着,从“Java”来看,哈希表的数组根本不起作用,但我认为解决方案是使用“List>” 我觉得这有点复杂。有什么帮助吗?这很难还是我太复杂了 Json示例: {"Config":[{"Name":"method1","Uses":"0","Event":["Start","Play"],"Action":{"Class":"Ads","Options":{"

我创建了一个方法“Json到哈希表”,反之亦然。我使用哈希表是因为“Java”中没有关联数组。我现在的问题是当json中有一个数组时。这意味着,从“Java”来看,哈希表的数组根本不起作用,但我认为解决方案是使用“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"}}]}
查看:

我的代码:

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;
    }
公共哈希表JSonDecode(字符串数据){
Hashtable htJS=新的Hashtable();
试一试{
JSONObject objJS=新的JSONObject(数据);
迭代器it=objJS.keys();
字符串键=null;
对象值=空;
while(it.hasNext()){
key=it.next();
value=objJS.get(key);
if(JSONObject的值实例){
value=JSonObjectToHashtable(value.toString());
}
if(JSONArray的值实例){
value=JSonArrayToHashtable(value.toString());
}
put((字符串)键,值);
}
}捕获(JSONException e){
e、 printStackTrace();
//没有有效的json
返回null;
}
返回htJS;
}
公共哈希表JSonObjectToHashtable(字符串数据){
Hashtable htJS=新的Hashtable();
JSONObject对象对象;
试一试{
objJS=新的JSONObject(数据);
迭代器it=objJS.keys();
字符串键=null;
对象值=空;
while(it.hasNext()){
key=it.next();
value=objJS.get(key);
if(JSONObject的值实例){
value=JSonObjectToHashtable(value.toString());
}
put((字符串)键,值);
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回htJS;
}
公共列表JSonArrayToHashtable(字符串数据){
List listMap=new ArrayList();
Map entry=newhashmap();
JSONArray objJSA;
试一试{
objJSA=新的JSONArray(数据);
for(int i=0;i
映射(哈希表)API类似于JSONObject API。除非应用程序一致地使用映射,否则实际上不需要将JSONObject转换为映射

如果需要将JSONObject转换为Map,则Map可以是
Map
,其中Object可以是以下类型之一:

  • 基元(整数、浮点等)
  • 地图
  • 上述树类型的集合(数组、列表等)

感谢您的回复。那么,在Android上使用包含所有格式的Json的最佳实践是直接使用JsonObject和JSONArray?很难给出建议,因为这完全取决于应用程序。我个人的偏好是使用游标与内容提供商合作,通过同步适配器、缓存响应(JSON->SQLite)和使用ContentResolver.notifyChange(…)重新验证UI与服务器通信,但它涉及很多移动部件。