简体   繁体   English

如何在Android中使用GSON解析以下JSON?

[英]How to parse following JSON using GSON in android?

As keysArray (A,B,C) are dynamic and cores having the same object names ? 由于keysArray (A,B,C)是dynamic并且cores具有相同的对象名称? Please help !!! 请帮忙 !!!

{

 "result":"success",

 "keysArray":[
     "A",
     "B",
     "C",
     "D",
     "E"
     ],

 "cores":{

    "A":[{"key":"value"}],
    "B":[{"key":"value"}],
    "C":[{"key":"value"}],
    "D":[{"key":"value"}],
    "E":[{"key":"value"}]
 }
}

I have achieved it in this way. 我是通过这种方式实现的。

String responseStr = //JsonResponse here
Type type = new TypeToken<GetMainResponse>() {}.getType();
GetMainResponse getMainResponse = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create().fromJson(responseStr, type);

    int size = getMainResponse.getKeysArray().size();
    for (int i = 0; i < size; i++) {
        JSONArray jCoreIngredients = new JSONObject(responseStr)
                                            .getJSONArray(getMainResponse.getKeysArray().get(i));
        String innerStr = jCoreIngredients.toString();
        Type type2 = new TypeToken<ArrayList<GetMainResponse.InnerCores>>() {}.getType();
        ArrayList<GetMainResponse.InnerCores> ingredientsInner = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create().fromJson(innerStr, type2);
    }

//And this is my POJO

public class GetMainResponse{
String result;
ArrayList<String> keysArray;
Cores cores;

public String getResult() { return result; }

public void setResult(String result) { this.result = result; }

public ArrayList<String> getKeysArray() { return keysArray; }

public void setKeysArray(ArrayList<String> keysArray) { this.keysArray = keysArray; }

public Data getCores() { return data; }

public void setCores(Cores cores) { this.cores = cores; }

public class Cores {

// No declaration and not getter setter here.

 public class InnerCores {
    String key;

    public String getKey() { return key; }

    public void setKey(String result) { this.key = key; }

 }
}

Any suggestions :) 有什么建议么 :)

For this i will suggest to use Go To JsonSchema2Pojo 为此,我建议使用Go To JsonSchema2Pojo

To go there and select 要去那里选择

  • Source Type : JSON 源类型:JSON
  • Annotation style: GSON 注释样式:GSON

And click Preview at bottom side You will get the GSON based Model class 然后单击底部的“预览”。您将获得基于GSON的Model类

Try this out its a sample for getting about us status and description.Based on this code you can make yours. 尝试使用此示例来了解我们的状态和说明。您可以根据此代码制作自己的代码。 this is the code for your main page. 这是您主页的代码。

Gson gson = new Gson();
AboutUsRootObject joc = gson.fromJson(responseOutput.toString(), AboutUsRootObject.class);
resultStatus = joc.status;
resultOutputMsg = joc.message;

then create a new class as AboutUsRootObject.java and write this code: 然后创建一个新类,如AboutUsRootObject.java并编写以下代码:

 public class AboutUsRootObject {


        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        public AboutUsData getData() {
            return data;
        }

        public void setData(AboutUsData data) {
            this.data = data;
        }

        public int status ;
        public String message ;
        public AboutUsData data ;
    }

here you have defined getter setter for the data.Here data key has some more data in it multiple, as is its cores key in yours so again create a new class of getter setter similar as above and proceed. 在这里,您已经为数据定义了getter setter 。在这里, data密钥中包含多个数据,因为它的核心密钥在您的中,所以再次创建一个新的类似于上面的getter setter类并继续。

try this: 尝试这个:

try {
            JSONObject obj1 = new JSONObject(str);
            Gson gson = new Gson();
            Demo2 demo2 = gson.fromJson(obj1.toString(),Demo2.class);
            data3 = gson.toJson(demo2);
            Log.e("Main Activity",data3.toString());



        }catch (JSONException e) {

            e.printStackTrace();
        }

and Demo2 class : 和Demo2类:

public class Demo2 {
    private String result;
    private ArrayList<String> keysArray;
    private Core cores;
    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }
    public ArrayList<String> getKeysArray() {
        return keysArray;
    }

    public void setKeysArray(ArrayList<String> keysArray) {
        this.keysArray = keysArray;
    }



    private class Core {
        private ArrayList<ClassD> D;
        private ArrayList<ClassE> E;
        private ArrayList<ClassC> C;
        private ArrayList<ClassB> B;
        private ArrayList<ClassA> A;

        public ArrayList<ClassA> getA() {
            return A;
        }

        public ArrayList<ClassB> getB() {
            return B;
        }

        public ArrayList<ClassC> getC() {
            return C;
        }

        public ArrayList<ClassD> getD() {
            return D;
        }

        public ArrayList<ClassE> getE() {
            return E;
        }

        private class ClassA {
            private String key;

            public String getKey() {
                return key;
            }

            public void setKey(String key) {
                this.key = key;
            }
        }

        private class ClassB {
            private String key;

            public String getKey() {
                return key;
            }

            public void setKey(String key) {
                this.key = key;
            }
        }

        private class ClassC {
            private String key;

            public String getKey() {
                return key;
            }

            public void setKey(String key) {
                this.key = key;
            }
        }

        private class ClassE {
            private String key;

            public String getKey() {
                return key;
            }

            public void setKey(String key) {
                this.key = key;
            }
        }

        private class ClassD {
            private String key;

            public String getKey() {
                return key;
            }

            public void setKey(String key) {
                this.key = key;
            }
        }


    }

    public Core getCores() {
        return cores;
    }

    public void setCores(Core cores) {
        this.cores = cores;
    }







}

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

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