2016-03-03 3 views
0

Я пытаюсь преобразовать набор результатов в строку JSON в Java. Данные в видепреобразовать результаты в вложенный json в java

+---+----------+-------------+---------------+ 
| id| job_type | question | response_type | 
+---+----------+-------------+---------------+ 
| 1 | quote | question1 | text1   | 
| 2 | quote | question2 | number2  | 
+---+----------+-------------+---------------+ 
| 3 | standard | question1 | text2   | 
| 4 | standard | question2 | number2  | 
+---+----------+-------------+---------------+ 

, и я хочу, чтобы получить JSON в виде

{ 
    "JobType": “Quote", 
    "Questions": [{ 
     "question": “question1", 
     "response_type": “ text1", 
    }, { 
     "question": “question2", 
     "response_type": “ number2", 
    }], 
    “JobType”:”Standard”, 
    "Questions": [{ 
     "question": “question1", 
     "response_type": “ number2", 
    }, { 
     "question": “question2", 
     "response_type": “ number2", 
    }] 
} 

Это где я получил до сих пор

JSONObject jobType = new JSONObject(); 
List<JSONObject> jobTypeQuestionListIndividual = new ArrayList<JSONObject>(); 

int i = 0; 
if (!jobTemplate.next()) {  
     System.out.println("No records found"); 
} else { 
    do { 
     if (i % 2 == 0) { 
      jobType.put("JobType",jobTemplate.getString("JobType")); 

      JSONObject firstQuestion = new JSONObject(); 
      firstQuestion.put("question", jobTemplate.getString("question")); 
      firstQuestion.put("response_type", jobTemplate.getString("response_type")); 

      jobTypeQuestionListIndividual.add(firstQuestion); 

      jobType.put("Questions",jobTypeQuestionListIndividual); 

     } else { 
      JSONObject question = new JSONObject(); 

      question.put("question", jobTemplate.getString("question")); 
      question.put("response_type", jobTemplate.getString("response_type")); 

      jobTypeQuestionListIndividual.add(question); 
     } 

     i = i+1; 

    } while (jobTemplate.next()); 
} 

System.out.println(jobType); 

, но это приводит к

{ 
    "JobType": “Quote", 
    "Questions": [{ 
     "question": “question1", 
     "response_type": “ text1", 
    }, { 
     "question": “question2", 
     "response_type": “ number2", 
    },{ 
     "question": “question1", 
     "response_type": “ number2", 
    }, { 
     "question": “question2", 
     "response_type": “ number2", 
    }] 
} 

Заранее благодарим за ваш шлем п.

+0

Я никогда не использовал JSON с Java, но я советую вам создать QuestioResponse класс с двумя строками (возможно, целое число, если вы хотите сохранить идентификатор), и класс JobType, который содержит List of QuestionResponse (используйте список, который сохраняет заказ, если это важно) и String с именем типа работы. Затем, как только вы преобразуете все свои наборы результатов в эти Beans, вы можете работать над ними, чтобы создать объект Json (или даже использовать некоторые API/библиотеки, которые сделают это для вас). Это должно быть проще. – Asoub

ответ

0

Мне удалось выяснить, как построить вложенный json, сначала создав хэш-карты и хэшеты. Это был вдохновлен следующие ответы: How to get an array of two values from jdbc result set и Storing a hash map inside another hash map and improving performance

Мой код не обеспечивает JSON в точно формате я первоначально необходимо, но это работает для меня. Я получаю

{"Quote": [{"question": "question1", "response_type": "text1",}, {"question": "question2", "response_type": "number2",}] , "Стандарт": [{ "вопрос": «Question1" ,"}]}

Мой обновленный код

String out = ""; 
try { 
    String jobType = ""; 
    ResultSet jobTemplate = jobs.getAllJobDetailsTemplate(Integer.parseInt(customerId)); 
    Map<String, Set<HashMap<String,String>>> jobTypes = new HashMap<String, Set<HashMap<String,String>>>(); 

    while (jobTemplate.next()) { 
     jobType = jobTemplate.getString("JobType"); 
     Set<HashMap<String,String>> questions = jobTypes.containsKey(jobType) ? jobTypes.get(jobType) : new HashSet<HashMap<String,String>>(); 
      HashMap<String,String> individualQuestion = new HashMap<String,String>(); 
      individualQuestion.put("question", jobTemplate.getString("question")); 
      individualQuestion.put("response_type", jobTemplate.getString("response_type")); 
      questions.add(individualQuestion); 
     jobTypes.put(jobType, questions); 
    } 

    out = new ObjectMapper().writeValueAsString(jobTypes); 
} 
Смежные вопросы