我正在構建一個測驗應用程式,用戶可以通過從 a、b、c、d 中選擇一個選項來回答多個問題。現在,當用戶輸入他對問題的答案時,答案被存盤在一個 ArrayList 中,但我希望它被存盤為 JSON 物件中鍵的值。我的 JSON 檔案目前看起來像這樣:
[
{"Q1": ""},
{"Q2": ""},
{"Q3": ""},
{"Q4": ""},
{"Q5": ""},
{"Q6": ""},
{"Q7": ""},
{"Q8": ""},
{"Q9": ""},
{"Q10": ""},
{"Q11": ""},
{"Q12": ""},
{"Q13": ""},
{"Q14": ""},
{"Q15": ""}
]
這是從用戶那里獲取答案的代碼:
public ArrayList<String> askQuestionsOneByOne() {
QuizQuestions qq = new QuizQuestions();
Set<Map.Entry<String, String>> entry = qq.entireQuestionsList().entrySet();
ArrayList<String> userAnswer = new ArrayList<>();
for (Object o : entry) {
System.out.println(o);
String answer = askUser();
askUserIfHeWantsToQuit();
userAnswer.add(answer);
}
return userAnswer;
}
當用戶輸入答案時,我希望將該答案存盤在此檔案中相應的問題值中,而不是空字串中,但我不知道該怎么做。我將不勝感激這方面的指導。
謝謝
uj5u.com熱心網友回復:
你需要使用像org.json這樣的 json 庫,創建一個 JSONArray 并用 JSONObjects 填充它,假設我正確理解結構,你所指的Object o 實際上是一個Map.Entry<String, String>,它你可以用來獲取一個鍵和一個值,我相信這個鍵會有問題(Q1、Q2、Q3...),你可以用它來將物件添加到 JSONArray
JSONArray arr = new JSONArray();
for (Map.Entry<String, String> o: entry) {
String answer = askUser();
JSONObject answerObject = new JSONObject();
answerObject.put(o.getKey(), answer);
arr.put(answerObject);
}
System.out.println(arr.toString(4));
輸出:
[
{"Q1": "c"},
{"Q2": "a"},
{"Q3": "b"},
{"Q4": "b"},
{"Q5": "c"}
]
uj5u.com熱心網友回復:
JSON 是允許在不同程式之間傳輸物件的檔案格式,即使它們使用不同的編程語言。如果你真的想要這種形式的解決方案,你需要使用一些提供 JSON 服務的庫(我自己推薦 GSON)。您想要的解決方案中的代碼:首先,您需要創建一個類(例如答案):
public class Answers {
String Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15;
public void setQ1(String q1) {
Q1 = q1;
}
public void setQ2(String q2) {
Q2 = q2;
}
public void setQ3(String q3) {
Q3 = q3;
}
public void setQ4(String q4) {
Q4 = q4;
}
public void setQ5(String q5) {
Q5 = q5;
}
public void setQ6(String q6) {
Q6 = q6;
}
public void setQ7(String q7) {
Q7 = q7;
}
public void setQ8(String q8) {
Q8 = q8;
}
public void setQ9(String q9) {
Q9 = q9;
}
public void setQ10(String q10) {
Q10 = q10;
}
public void setQ11(String q11) {
Q11 = q11;
}
public void setQ12(String q12) {
Q12 = q12;
}
public void setQ13(String q13) {
Q13 = q13;
}
public void setQ14(String q14) {
Q14 = q14;
}
public void setQ15(String q15) {
Q15 = q15;
}
}
然后,您需要創建一個 Answers 類的物件,該物件將處理答案并將其轉換為 JSON(例如使用 GSON):
Answers answers = new Answers();
//somehow set the values (maybe by using Scanner.in?)
answers.setQ1("YES");
answers.setQ2("YES");
answers.setQ3("NO");
answers.setQ4("NO");
answers.setQ5("dog");
answers.setQ6("Giraffe");
answers.setQ7("Gson");
answers.setQ8("Java");
answers.setQ9("CSS");
answers.setQ10("NO");
answers.setQ11("Maven");
answers.setQ12("dog");
answers.setQ13("Elephant");
answers.setQ14("Gson");
answers.setQ15("No");
//using Gson
String json_file;
Gson g = new Gson();
json_file = g.toJson(answers);
// to file
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("answers.json"));
writer.write(json_file);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
.json 檔案:
{
"Q1": "YES",
"Q2": "YES",
"Q3": "NO",
"Q4": "NO",
"Q5": "dog",
"Q6": "Giraffe",
"Q7": "Gson",
"Q8": "Java",
"Q9": "CSS",
"Q10": "NO",
"Q11": "Maven",
"Q12": "dog",
"Q13": "Elephant",
"Q14": "Gson",
"Q15": "No"
}
However, in my opinion the code that satisfy your idea is too complicated and I highly recommend to reconsider it. Maybe it would be better to use Answers class with some informations about the person that plays the quiz and much cleaner String Array of answers instead of different variables for each one. Programmer should always try to find a way to optimize, clean and simplify the solution. As an example:
public class Answers {
int id;
String name;
String surname;
String[] answer;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Answers() {
answer = new String[15];
}
}
main body:
Answers answers = new Answers();
//somehow set the values (maybe by using Scanner.in?)
answers.setId(1);
answers.setName("John");
answers.setSurname("Baker");
answers.answer[0] = "YES";
answers.answer[1] = "YES";
answers.answer[2] = "NO";
answers.answer[3] = "NO";
answers.answer[4] = "Elephant";
answers.answer[5] = "Java";
answers.answer[6] = "Maven";
answers.answer[7] = "CSS";
answers.answer[8] = "bash";
answers.answer[9] = "quiz";
answers.answer[10] = "dog";
answers.answer[11] = "coffee";
answers.answer[12] = "tea";
answers.answer[13] = "YES";
answers.answer[14] = "Borneo";
//using Gson
String json_file;
Gson gson = new Gson();
json_file = gson.toJson(answers);
// to file
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("answers.json"));
writer.write(json_file);
output .json:
{
"id": 1,
"name": "John",
"surname": "Baker",
"answer": [
"YES",
"YES",
"NO",
"NO",
"Elephant",
"Java",
"Maven",
"CSS",
"bash",
"quiz",
"dog",
"coffee",
"tea",
"YES",
"Borneo"
]
}
You can add some code for input of answers (I mean to make them be taken from keyboard or what you want), but I redirect to google. Be creative!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324352.html
上一篇:在JS腳本中推送PHP陣列
