我正在将以下字符串检索到 json 数组中。代码如下所示并打印结果:
public JSONArray selectGrades(ArrayList<String> dates) {
JSONArray jArray = new JSONArray();
ArrayList<String> grades= new ArrayList<String>();
DbConnector connect = new DbConnector();
for (int i = 0; i < dates.size(); i++) {
String selectDetailsQuery = "SELECT grade FROM classes where exam_date = '" + dates.get(i)"'";
//System.out.println(selectDetailsQuery);
ResultSet rs = connect.executeQuery(selectDetailsQuery);
try {
while (rs.next()) {
grades.add(rs.getString(1));
jArray.put(grades);
grades.clear();
}
System.out.println("JSON Array" + jArray);
} catch (SQLException e) {
e.printStackTrace();
}
}
//close all rs,stat,connection
connect.close();
return jArray;
}
JSON 打印出来: JSON 数组 [[A,A,B,C,D]] JSON 数组 [[A,A,B,C,D,C,C,C,D,A]] JSON 数组 [[A,A,B,C,D,C,C,C,D,A,D,A,B,B,A]]
它的作用是不断添加到我在循环时创建的 JSON 数组中。我需要的是这个结果:
JSON Array [["A,A,B,C,D"]]
JSON Array [["A,A,B,C,D"],["C,C,C,D,A"]]
JSON Array [["A,A,B,C,D"],["C,C,C,D,A"],["D,A,B,B,A"]]
我被困在这个问题上几个小时了。将不胜感激所提供的任何帮助。谢谢。
最佳答案
将 grades
列表的创建移至 for
循环中:
DbConnector connect = new DbConnector();
for (int i = 0; i < dates.size(); i++) {
ArrayList<String> grades= new ArrayList<String>();
另外,我不知道 cmt
来自哪里,但您的 while
循环需要看起来更像这样:
while (rs.next()) {
grades.add(rs.getString(1));
}
jArray.put(grades);
更新
对于您要求的输出,您真正需要的是这样的:
char separator = "";
StringBuilder sb = new StringBuilder();
while (rs.next()) {
sb.append(separator).append(rs.getString(1));
separator = ",";
}
jArray.put(new JSONArray(sb.toString()));
但请注意,您正在创建的数据结构是一个数组,其元素是只有一个元素的数组,并且它们包含的元素是一个字符串(“A,B,C,...”)。 Java 的等价物是 string[][]
。这里有一种代码味道,我认为可能有更好的方法来表示您的数据,但由于我不知道如何使用数据,所以我无法真正建议最好的方法。
关于Java JSON 格式帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883812/