2014-04-04 41 views
-9

通過遵循這blog我該如何實現解析這樣的JSON數據?任何人都可以給我一些鏈接/教程檢索JSON數據。解析java中的多維JSON

{ 
     "batters": 
      { 
       "batter": 
        [ 
         { "id": "1001", "type": "Regular" }, 
         { "id": "1002", "type": "Chocolate" }, 
         { "id": "1003", "type": "Blueberry" }, 
         { "id": "1004", "type": "Devil's Food" } 
        ], 
       "batter2": 
        [ 
         { "id": "6", "type": "POGI" }, 
         { "id": "66", "type": "PWEPWE" }, 
         { "id": "666", "type": "SABON" }, 
         { "id": "6666", "type": "SABAW" } 
        ] 
      }, 
     "topping": 
      [ 
       { "id": "5001", "type": "None" }, 
       { "id": "5002", "type": "Glazed" }, 
       { "id": "5005", "type": "Sugar" }, 
       { "id": "5007", "type": "Powdered Sugar" }, 
       { "id": "5006", "type": "Chocolate with Sprinkles" }, 
       { "id": "5003", "type": "Chocolate" }, 
       { "id": "5004", "type": "Maple" } 
      ] 
    } 

這裏是我的解析器,我已經在這個檢索數據中使用的,但我有在獲得打者標籤和獲得連擊/ batter2內標籤和可能的ID和類型可以是問題多..

/* ---------------------------------------------------------------------------------------------------------------------------- * 
    Custom 
* ---------------------------------------------------------------------------------------------------------------------------- */ 

    @SuppressWarnings("unchecked") 
    public Map<String, ArrayList<List<String>>> JsonToMap(String JsonObj) { 
     Map<String, ArrayList<List<String>>> TblMap = new HashMap<String, ArrayList<List<String>>>(); 
     try { 
      List<List<Object>> JObj = (List<List<Object>>) getObjectFromJson(JsonObj); 
      for (int x = 0; x < JObj.size(); x++) { 

       List<Object> Tbl = new ArrayList<Object>(); 
       String MapKey = JObj.get(x).get(0).toString(); 
       Tbl = (List<Object>) JObj.get(x).get(1); 
       TblMap.put(MapKey, new ArrayList<List<String>>()); 
       for (Object obj : Tbl) { 
        TblMap.get(MapKey).add((List<String>) obj); 
        } 
      } 
     } catch (JSONException e) { TblMap = null; } 
     return TblMap; 
    } 

    @SuppressWarnings("unchecked") 
    public Map<String, ArrayList<List<Object>>> JsonToMapObject(String JsonObj) { 
     Map<String, ArrayList<List<Object>>> TblMap = new HashMap<String, ArrayList<List<Object>>>(); 
     try { 
      List<List<Object>> JObj = (List<List<Object>>) getObjectFromJson(JsonObj); 
      for (int x = 0; x < JObj.size(); x++) { 

       List<Object> Tbl = new ArrayList<Object>(); 
       String MapKey = JObj.get(x).get(0).toString(); 
       Tbl = (List<Object>) JObj.get(x).get(1); 
       TblMap.put(MapKey, new ArrayList<List<Object>>()); 
       for (Object obj : Tbl) { 
        TblMap.get(MapKey).add((List<Object>) obj); 
        } 
      } 
     } catch (JSONException e) { TblMap = null; } 
     return TblMap; 
    } 


    public String GetValue(Map<String, ArrayList<List<String>>> TableCollection, String TableName, Integer RowNumber, Integer ColumnNumber) { 
     return TableCollection.get(TableName).get(RowNumber).get(ColumnNumber).toString(); //TableCollection.get(TableName).get(RowNumber).get(ColumnNumber).toString(); 
    } 

    public String MapToJson(Map TMap) { 
     JSONObject z = new JSONObject(TMap); 
     return z.toString(); 
    } 

    /* ---------------------------------------------------------------------------------------------------------------------------- * 
    JSON Natives 
* ---------------------------------------------------------------------------------------------------------------------------- */ 

    public String getJsonRepresentation(Object value) throws JSONException { 
     if (value == null || value.equals(null)) { return "null"; } 
     if (value instanceof Number) { return JSONObject.numberToString((Number) value); } 
     if (value instanceof Boolean) { return value.toString(); } 
     if (value.getClass().isArray()) { 
      StringBuilder sb = new StringBuilder(); 
      sb.append("["); 
      String separator = ""; 
      for (Object o: (Object[]) value) { 
       sb.append(separator).append(getJsonRepresentation(o)); 
       separator = ","; 
      } 
      sb.append("]"); 
      return sb.toString(); 
     } 
     if (value instanceof String) { return value.toString(); } 
     return JSONObject.quote(value.toString()); 
    } 

    public Object getObjectFromJson(String jsonString) throws JSONException { 
     final Object value = (new JSONTokener(jsonString)).nextValue(); 
     if (value == null || value.equals(null)) { return null; } 
     else if ((value instanceof String) || (value instanceof Number) || (value instanceof Boolean)) { return value; } 
     else if (value instanceof JSONArray) { return getListFromJsonArray((JSONArray)value); } 
     else if (value instanceof JSONObject) { return getListFromJsonObject((JSONObject)value); } 
     throw new JSONException("Invalid JSON string."); 
    } 

    public List<Object> getListFromJsonArray(JSONArray jArray) throws JSONException { 
     List<Object> returnList = new ArrayList<Object>(); 
     for (int i = 0; i < jArray.length(); i++) { returnList.add(convertJsonItem(jArray.get(i))); } 
     return returnList; 
    } 

    @SuppressWarnings("unchecked") 
    public List<Object> getListFromJsonObject(JSONObject jObject) throws JSONException { 
     List<Object> returnList = new ArrayList<Object>(); 
     Iterator<String> keys = jObject.keys(); 
     List<String> keysList = new ArrayList<String>(); 
     while (keys.hasNext()) { keysList.add(keys.next()); } 
     Collections.sort(keysList); 
     for (String key : keysList) { 
      List<Object> nestedList = new ArrayList<Object>(); 
      nestedList.add(key); 
      nestedList.add(convertJsonItem(jObject.get(key))); 
      returnList.add(nestedList); 
     } 
     return returnList; 
    } 

    public Object convertJsonItem(Object o) throws JSONException { 
     if (o == null) { return "null"; } 
     if (o instanceof JSONObject) { return getListFromJsonObject((JSONObject) o); } 
     if (o instanceof JSONArray) { return getListFromJsonArray((JSONArray) o); } 
     if (o.equals(Boolean.FALSE) || (o instanceof String && ((String) o).equalsIgnoreCase("false"))) { return false; } 
     if (o.equals(Boolean.TRUE) || (o instanceof String && ((String) o).equalsIgnoreCase("true"))) { return true; } 
     if (o instanceof Number) { return o; } 
     return o.toString(); 
    } 

    public List<String> getStringListFromJsonArray(JSONArray jArray) throws JSONException { 
     List<String> returnList = new ArrayList<String>(); 
     for (int i = 0; i < jArray.length(); i++) { 
      String val = jArray.getString(i); 
      returnList.add(val); 
     } 
     return returnList; 
    } 

這裏是我的代碼中調用我的解析器

 Map<String, ArrayList<List<String>>> mapJSON=JsonToMap(convertThisTest);// JsonToMap(String JsonObj)     
     String valuefromJSONObject=GetValue(mapJSON, "batters", 1, 1); 
+1

不博客中對如何分析這些數據的教程? – SudoRahul

+0

可能的重複[如何解析JSON在Java](http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java) –

+0

它沒有..但我怎麼能解析這種格式.. – DreamBigAlvin

回答