无法从android中的JSON中提取数组元素

时间:2018-03-18 10:17:15

标签: android arrays json

我一直在尝试从我的JSON中提取数组元素,但到目前为止还没有。

我有以下JSON:

{
    "Sample JSON": [{
            "Title": "Title1",
            "Audit": [{
                    "auditId": "01",
                    "type": "sampleType",
                    "auditText": "sampleText",
                    "answer": ["Ans1", "Ans2"]
                },
                {
                    "auditId": "02",
                    "type": "sampleType2",
                    "auditText": "sampleText2",
                    "answer": ["Ans1", "Ans2", "Ans3", "Ans4"]
                }
            ]
        },
        {
            "Title": "Title2",
            "Audit": [{
                    "auditId": "03",
                    "type": "sampleType3",
                    "auditText": "sampleText3",
                    "answer": ["Ans1", "Ans2"]
                },
                {
                    "auditId": "04",
                    "type": "sampleType4",
                    "auditText": "sampleText4",
                    "answer": ["Ans1", "Ans2", "Ans3", "Ans4"]
                }
            ]
        }
    ]
}

我想提取数组的数组元素'回答'。

我在以下方法的评论中指出的行中出现异常:

    public void getAudit(String myJSON) {

        auditList = new ArrayList<AuditList>();
        String title;
        String auditId;
        String type;
        String auditText;
        ArrayList<String> answer = new ArrayList<>();

        try {
            JSONObject jsonObj = new JSONObject(myJSON);
            JSONArray jssArray = jsonObj.getJSONArray("Sample JSON");
            int jsonArrLength = jssArray.length();
            for (int i = 0; i < jsonArrLength; i++) {
                JSONObject jsonChildObj = jssArray.getJSONObject(i);
                title = jsonChildObj.getString("Title");

                JSONArray jssArray1 = jsonChildObj.getJSONArray("Audit");
                for (int i1 = 0; i1 < jssArray1.length(); i1++) {


                    JSONObject jsonChildObj1 = jssArray1.getJSONObject(i1);
                    type = jsonChildObj1.optString("type");
                    auditText = jsonChildObj1.optString("auditText");

                    auditId = jsonChildObj1.optString("auditId");

                    JSONArray jssArray2 = jsonChildObj1.getJSONArray("answer");
                     //Getting exception in above line

                    for (int j=0; j<jssArray2.length(); j++)
                    {
                        answer.add(jssArray2.get(j).toString()) ;
                    }

                    AuditList aList = new AuditList();
                    aList.setQuesId(auditId);
                    aList.setQuesText(auditText);
                    aList.setQuesTypw(auditType);
                    aList.setAnswer(answer);
                    aList.setCategoryName(title);
                    auditList.add(aList);

                }


            }

.
.
.
.
.
}

我发现使用调试器在上面指定的行中发生了异常。 无法找到一种方法来提取数组的数组元素&#39;回答&#39;。 请帮忙。

2 个答案:

答案 0 :(得分:0)

我做这种事情的方法是前往this link然后将我的json粘贴到那里并获得我的课程。之后,您可以通过将此行添加到Gson来添加build.gradle到您的平板:

compile 'com.google.code.gson:gson:2.6.2'

然后,只需创建刚刚创建的已创建类的实例,并将json转换为目标类:

NewClass classObject = new Gson().fromJson(YOUR_JSON, NewClass.class);

答案 1 :(得分:0)

if(!jsonChildObj1.get("answer").toString().equals("")){ 
   JSONArray jssArray2 = jsonChildObj1.getJSONArray("answer");
   for (int j=0; j<jssArray2.length(); j++)
   {
      answer.add(jssArray2.get(j).toString()) ;
   }
}

由于空数据(“”)而发生的异常。要防止它验证它和getJSONArray()。 refer