2013-06-02 21 views
0

我创建了一个方法“Json to HashTable”,反之亦然。我使用HashTable是因为“Java”没有关联数组。现在我的问题是在json中有一个数组。这意味着从“Java”的HashTable数组:/根本不工作,但我认为解决方案是使用“列表”任何帮助?这难道还是我复杂了吗?Json/JsonArray到Android中的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; 
    } 

回答

0

地图(哈希表)API类似的JSONObject API。除非您的应用程序一致地使用Maps,否则实际上不需要将JSONObject转换为Map。

如果你需要转换的JSONObject到地图,该地图可Map<String, Object>类型,其中对象可以是以下类型之一:

  • 字符串
  • 原语(整型,浮点型等)
  • 地图
  • 收集上述
+0

感谢提到响应树类型(数组,列表等)。那么,使用包含所有格式的Json处理Android的最佳做法是直接使用JsonObject和JSONArray? – TyrionLannister

+0

很难给出建议,因为这一切都取决于应用程序。我的个人偏好是使用Cursors与内容提供者合作,通过Sync Adapters与缓存响应(JSON-> SQLite)与服务器通信,并使用ContentResolver.notifyChange(...)重新验证UI,但涉及很多移动部分。 – Y2i