简体   繁体   English

在java中解析多维JSON

[英]Parsing multidimensional JSON in java

By following this blog how can I implement parsing JSON Data like this?通过关注此博客,我如何实现像这样解析 JSON 数据? Could anyone give me some link/tutorial in retrieving JSON data.谁能给我一些检索 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" }
            ]
    }

Here is my parser that i've used in retrieving this data but i'm having problem in getting batters tag and getting to the inner tag of batter/batter2 and possibly the id and type can be multiple..这是我在检索这些数据时使用的解析器,但是我在获取batter 标签和获取batter/batter2 的内部标签时遇到问题,而且id 和type 可能是多个..

 /* ---------------------------------------------------------------------------------------------------------------------------- *
    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;
    }

Here is my code in calling my Parser这是我调用解析器的代码

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

Try to use google GSON Library it will fullfill the same requirements as you want.尝试使用 google GSON 库,它将满足您想要的相同要求。

Here is the Link for a sample tutorial implemented in android how ever the language used is Java All you have to do is make a data model of same type and as members in JSOn.这是在 android 中实现的示例教程的链接,所使用的语言是 Java 你所要做的就是创建一个相同类型的数据模型,并作为 JSOn 中的成员。 try the example in the link its helpfull试试链接中的例子,它很有帮助

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM