Java 有没有一种方便的方法将多个ArrayList打包到一个JsonArray中?
我正在尝试设置一个webapp,通过JSON发送数据库表。我想不费吹灰之力把所有的参赛作品都寄出去。因此,我将所有字段读取为ArrayList,现在我可以通过JSON逐个解析并发送它们。但是,难道没有一种方便的方法将它们全部打包到一个JsonArray中吗 下面是我的代码示例:Java 有没有一种方便的方法将多个ArrayList打包到一个JsonArray中?,java,json,arraylist,Java,Json,Arraylist,我正在尝试设置一个webapp,通过JSON发送数据库表。我想不费吹灰之力把所有的参赛作品都寄出去。因此,我将所有字段读取为ArrayList,现在我可以通过JSON逐个解析并发送它们。但是,难道没有一种方便的方法将它们全部打包到一个JsonArray中吗 下面是我的代码示例: public static JSONArray[] getDBEntries(String tablename) { JSONArray[] js = new JSONArray[5]; Connecti
public static JSONArray[] getDBEntries(String tablename) {
JSONArray[] js = new JSONArray[5];
Connection conn = null;
Statement st = null;
ResultSet rs = null;
ArrayList<String> text = null;
ArrayList<String> altname = null;
ArrayList<String> altname2 = null;
ArrayList<String> icd10 = null;
ArrayList<String> alphaid = null;
int index = 0;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/users");
conn = ds.getConnection();
st = conn.createStatement();
rs = st.executeQuery("SELECT * FROM " + tablename);
while (rs.next()) {
text.add(rs.getString("text"));
if (altname != null) {
altname.add(rs.getString("altname"));
}
if (altname2 != null) {
altname2.add(rs.getString("altname2"));
}
if (icd10 != null) {
icd10.add(rs.getString("icd10"));
}
if (alphaid != null) {
alphaid.add(rs.getString("alphaid"));
}
index++;
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (st != null) st.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
js[0] = new JSONArray(text);
js[1] = new JSONArray(altname);
js[2] = new JSONArray(altname2);
js[3] = new JSONArray(icd10);
js[4] = new JSONArray(alphaid);
return js;
}
publicstaticjsonarray[]getDBEntries(stringtablename){
JSONArray[]js=新的JSONArray[5];
连接conn=null;
语句st=null;
结果集rs=null;
ArrayList text=null;
ArrayList altname=null;
ArrayList altname2=null;
ArrayList icd10=null;
ArrayList alphaid=null;
int指数=0;
试一试{
InitialContext ctx=新的InitialContext();
DataSource ds=(DataSource)ctx.lookup(“java:comp/env/jdbc/users”);
conn=ds.getConnection();
st=conn.createStatement();
rs=st.executeQuery(“从”+表名中选择*);
while(rs.next()){
text.add(rs.getString(“text”);
if(altname!=null){
添加(rs.getString(“altname”);
}
if(altname2!=null){
altname2.add(rs.getString(“altname2”);
}
如果(icd10!=null){
icd10.add(rs.getString(“icd10”);
}
if(alphaid!=null){
alphaid.add(rs.getString(“alphaid”);
}
索引++;
}
}捕获(例外情况除外){
例如printStackTrace();
}最后{
试一试{
如果(rs!=null)rs.close();
}捕获(SQLE异常){
e、 printStackTrace();
}
试一试{
如果(st!=null)st.close();
}捕获(SQLE异常){
e、 printStackTrace();
}
试一试{
如果(conn!=null)连接关闭();
}捕获(SQLE异常){
e、 printStackTrace();
}
}
js[0]=新的JSONArray(文本);
js[1]=新的JSONArray(altname);
js[2]=新的JSONArray(altname2);
js[3]=新的JSONArray(icd10);
js[4]=新的JSONArray(字母ID);
返回js;
}
您可以尝试在POJO中添加表数据。然后可以使用Gson将其转换为JsonArray
class AplPojo {
private String text;
private String altname;
private String altname;
private String icd10;
private String alphaid;
//getter and setters
}
public static String getDBEntries(String tablename) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
ArrayList<AplPojo> aplPojos = new ArrayList<AplPojo>();
int index = 0;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/users");
conn = ds.getConnection();
st = conn.createStatement();
rs = st.executeQuery("SELECT * FROM " + tablename);
while (rs.next()) {
AplPojo aplPojo= new AplPojo();
aplPojo.setText(rs.getString("text"));
aplPojo.setAltname(rs.getString("altname"));
aplPojo.setAltname2(rs.getString("altname2"));
aplPojo.setIcd10(rs.getString("icd10"));
aplPojo.setAlphaid(rs.getString("alphaid"));
index++;
aplPojos.add(aplPojo);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (st != null) st.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// create a new Gson instance
Gson gson = new Gson();
// convert your list to jsonArray
String aplPojosList = gson.toJson(aplPojos);
return aplPojos;
}
AplPojo类{
私有字符串文本;
私有字符串名称;
私有字符串名称;
专用字符串icd10;
私有字符串字母ID;
//二传手
}
公共静态字符串getDBEntries(字符串表名){
连接conn=null;
语句st=null;
结果集rs=null;
ArrayList aplPojos=新的ArrayList();
int指数=0;
试一试{
InitialContext ctx=新的InitialContext();
DataSource ds=(DataSource)ctx.lookup(“java:comp/env/jdbc/users”);
conn=ds.getConnection();
st=conn.createStatement();
rs=st.executeQuery(“从”+表名中选择*);
while(rs.next()){
AplPojo AplPojo=新AplPojo();
setText(rs.getString(“text”);
aplPojo.setAltname(rs.getString(“altname”));
aplPojo.setAltname2(rs.getString(“altname2”);
aplPojo.setIcd10(rs.getString(“icd10”);
setAlphaid(rs.getString(“alphaid”);
索引++;
aplPojo.add(aplPojo);
}
}捕获(例外情况除外){
例如printStackTrace();
}最后{
试一试{
如果(rs!=null)rs.close();
}捕获(SQLE异常){
e、 printStackTrace();
}
试一试{
如果(st!=null)st.close();
}捕获(SQLE异常){
e、 printStackTrace();
}
试一试{
如果(conn!=null)连接关闭();
}捕获(SQLE异常){
e、 printStackTrace();
}
}
//创建一个新的Gson实例
Gson Gson=新的Gson();
//将列表转换为jsonArray
字符串aplPojosList=gson.toJson(aplPojos);
返回aplPojos;
}
不要使用JSONArray[5],只需使用JSONArray及其元素即可。然后返回一个JSONArray,其中包含作为元素的每个数组。@KDM我不太确定是否正确:如何将
ArrayList
作为元素添加到JSONArray
?有没有办法将多个JSONArray添加到单个JSONArray(嵌套)?JSONArray js=new JSONArray();添加(新的JSONArray(文本))代码>等应该可以工作。JSONArray可以包含所有原语以及任何其他JSON对象。感谢您的解释,现在它的可重用性、简单明了的解决方案变得清晰1只是if语句现在已经过时了,我编辑过,我正在疯狂地从JSON解析它,我想它应该可以与ArrayList entries=gson.fromJson一起使用(jsonString,ArrayList.class)
,但似乎我必须对每个AplPojo元素进行迭代,或者我遗漏了什么?…已经找到了:ArrayList entries=gson.fromJson(jsonString,new-TypeToken(){}.getType());
:-)