我正在构建一个测试应用程序,用户可以通过选择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;
}
当用户输入答案时,我希望该答案存储在此文件中相应的问题值中,以取代空字符串,但我不知道如何做到这一点。在这方面我希望得到指导。
感谢你需要使用像org这样的json库。json,创建一个JSONArray,并填充JSONObjects,假设我没理解错结构,这里是Object o实际上是一个Map.Entry<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"}
]
JSON是一种允许在不同程序之间传输对象的文件格式,即使它们使用不同的编程语言。如果你真的想要这种形式的解决方案,你需要使用一些提供JSON服务的库(我个人推荐GSON)。从你想要的形式解决方案的代码:首先,你需要创建一个类(例如Answers):
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"
}
然而,在我看来,满足你想法的代码太复杂了,我强烈建议你重新考虑一下。也许它会更好地使用答案类与一些信息的人玩测验和更干净的字符串数组的答案,而不是每个不同的变量。程序员应该总是试图找到一种方法来优化、清理和简化解决方案。例如:
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];
}
}
主体:
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);
. json输出:
{
"id": 1,
"name": "John",
"surname": "Baker",
"answer": [
"YES",
"YES",
"NO",
"NO",
"Elephant",
"Java",
"Maven",
"CSS",
"bash",
"quiz",
"dog",
"coffee",
"tea",
"YES",
"Borneo"
]
}
你可以添加一些代码输入的答案(我的意思是使他们从键盘或你想要的),但我重定向到谷歌。有创意!