如何使用JSONObject android java制作JSON数组

时间:2016-10-19 04:42:58

标签: java android json sqlite while-loop



SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select *,t1.mysql_sys_id AS surveyid" +
  ",t1.status AS activestatus" +
  ",t2.survey_id AS questiosurveyid" +
  ",t2.mysql_sys_id AS questiosysid" +
  ",t3.mysql_sys_id AS answerid" +
  ",t3.question_id AS answerquestionid" +
  ",t3.survey_id AS answersurveyid" +
  ",t4.survey_id AS dependendsurveyid" +
  ",t4.question_id AS dependendquestionid" +
  ",t4.answer_id AS dependendanswerid" +
  ",t4.survey_id AS nestsurveyid" +
  ",t4.question_id AS nestquestionid" +
  " from " +
  "survey_tbl AS t1 LEFT JOIN " +
  "question_tbl AS t2 ON t1.mysql_sys_id = t2.survey_id  LEFT JOIN " +
  "answer_tbl AS t3 ON t1.mysql_sys_id = t3.survey_id AND t2.sys_id = t3.question_id  LEFT JOIN " +
  "dependent_question_tbl AS t4 ON t1.mysql_sys_id = t4.survey_id AND t2.mysql_sys_id = t4.question_id AND t3.sys_id = t4.answer_id  LEFT JOIN " +
  "nest_question_tbl AS t5 ON t1.mysql_sys_id = t4.survey_id AND t2.mysql_sys_id = t5.question_id  WHERE" +
  " t1.status = 'active' AND " +
  "t1.mysql_sys_id = " + id + " ", null);

res.moveToFirst();

JSONObject jj = new JSONObject();
JSONArray survey = new JSONArray();
JSONArray question = new JSONArray();
JSONArray answer = new JSONArray();
JSONArray dependent = new JSONArray();
JSONArray nest = new JSONArray();
JSONObject j = new JSONObject();
Set < String > questionCodes = new HashSet < String > ();
Set < String > depquestionCodes = new HashSet < String > ();
Set < String > nestquestionCodes = new HashSet < String > ();
while (res.isAfterLast() == false) {
  JSONObject k = new JSONObject();
  JSONObject l = new JSONObject();
  JSONObject m = new JSONObject();
  JSONObject n = new JSONObject();

  j.put("surveyid", res.getString(res.getColumnIndex("surveyid")));
  j.put("surveynum", res.getString(res.getColumnIndex("survey_num")));
  j.put("surveytitle", res.getString(res.getColumnIndex("survey_title")));
  j.put("surveydescription", res.getString(res.getColumnIndex("survey_description")));
  j.put("startdate", res.getString(res.getColumnIndex("start_date")));
  j.put("enddate", res.getString(res.getColumnIndex("end_date")));
  j.put("status", res.getString(res.getColumnIndex("activestatus")));


  String questionCode = res.getString(res.getColumnIndex("questiosysid"));
  if (questionCodes.contains(questionCode)) {
    continue;


  } else {
    k.put("mysqlsysid", res.getString(res.getColumnIndex("questiosysid")));
    k.put("questiondisplaynum", res.getString(res.getColumnIndex("question_display_order")));
    k.put("questiosysid", res.getString(res.getColumnIndex("questiosysid")));
    k.put("questionorder", res.getString(res.getColumnIndex("question_order")));
    k.put("questioncategory", res.getString(res.getColumnIndex("question_category")));
    k.put("question", res.getString(res.getColumnIndex("question")));
    k.put("status", res.getString(res.getColumnIndex("activestatus")));
    question.put(k);
  }

  l.put("displaynum", res.getString(res.getColumnIndex("input_display_order")));
  l.put("answerid", res.getString(res.getColumnIndex("answerid")));
  l.put("surveyid", res.getString(res.getColumnIndex("answersurveyid")));
  l.put("questionid", res.getString(res.getColumnIndex("answerquestionid")));
  l.put("inputtype", res.getString(res.getColumnIndex("input_type")));
  l.put("inputname", res.getString(res.getColumnIndex("input_name")));
  l.put("inputname", res.getString(res.getColumnIndex("input_other")));
  l.put("status", res.getString(res.getColumnIndex("activestatus")));

  String depquestionCode = res.getString(res.getColumnIndex("mysql_sys_id"));
  if (depquestionCodes.contains(depquestionCode)) {
    continue;


  } else {
    m.put("mysqlsysid", res.getString(res.getColumnIndex("mysql_sys_id")));
    m.put("surveyid", res.getString(res.getColumnIndex("dependendsurveyid")));
    m.put("questionid", res.getString(res.getColumnIndex("dependendquestionid")));
    m.put("referralid", res.getString(res.getColumnIndex("referral_id")));
    m.put("answerid", res.getString(res.getColumnIndex("dependendanswerid")));
    m.put("status", res.getString(res.getColumnIndex("activestatus")));
    dependent.put(m);
  }
  String nestquestionCode = res.getString(res.getColumnIndex("mysql_sys_id"));
  if (nestquestionCodes.contains(nestquestionCode)) {
    continue;


  } else {
    n.put("mysqlsysid", res.getString(res.getColumnIndex("mysql_sys_id")));
    n.put("surveyid", res.getString(res.getColumnIndex("nestsurveyid")));
    n.put("questionid", res.getString(res.getColumnIndex("nestquestionid")));
    n.put("referralid", res.getString(res.getColumnIndex("referral_id")));
    n.put("answerid", res.getString(res.getColumnIndex("answer_id")));
    n.put("status", res.getString(res.getColumnIndex("activestatus")));
    nest.put(n);
  }



  answer.put(l);



  res.moveToNext();


}

survey.put(j);

jj.put("answer", answer);
jj.put("question", question);
jj.put("dependent", dependent);
jj.put("nest", nest);
jj.put("survey", survey);
finalmyArray.put(jj);
&#13;
&#13;
&#13;

我正在使用LEFT JOIN选择多个表格。在上面的例子中,我为每个问题获得了额外的价值,因为我有多个答案。

情境:

在我的问题表中,我有1个条目。 在我的答案表中,我有3个条目。

由于答案表的迭代,问题对象将有3个条目。

目标

我想要实现的是问题对象只包含1个条目,因为在数据库中只有1个。并且对于包含3个条目的答案对象,因为在数据库中有3个。

假设:我认为这是由答案表上的迭代引起的。

我尝试在while循环中进行检查,但它无效。

1 个答案:

答案 0 :(得分:0)

使用这种方法非常容易。只需在此方法中传递游标,方法返回JSONArray。

public static JSONArray CreateJsonRecords(Cursor cursor)
            throws JSONException {
        JSONArray jsonArry = null;

        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            jsonArry = new JSONArray();
            do {
                JSONObject jsonObject = new JSONObject();
                for (int k = 0; k < cursor.getColumnCount(); k++) {
                    jsonObject
                            .put(cursor.getColumnName(k), cursor.getString(k));
                }

                jsonArry.put(jsonObject);
            } while (cursor.moveToNext());
        }
        cursor.close();

        return jsonArry;
    }

在这个方法中,您必须创建jsonArray,就像数据库字段名一样JsonObject Key.so如果您想使用我的方法,那么它必须与数据库字段名称相同,与jsonobject键名相同。