【问题标题】:Create json Object by java from data of mysql通过java从mysql的数据创建json对象
【发布时间】:2013-06-14 03:56:38
【问题描述】:

从mysql获取数据后,我需要将数据导出为JSON,格式如下:

{"Thong tin":[{"Ngay":"2013-06-18","Tinh":"An Giang"},{"Ngay":"2013-06-17","Tinh":"Bình Dương"},{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"}]}

但我得到的,就像

{"Thong tin":[{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"},{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"},{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"}]}

你能帮我解决这个错误吗?

我的代码:

acc = new access();
    rs2 = acc.query("select province_Name, date_Expired from thong_tin_khach_hang");
    List<String> province_Name = new ArrayList<String>();
    List<String> date_Expired = new ArrayList<String>();
    try {
        while (rs2.next()) {
            province_Name.add(rs2.getString(1));
            date_Expired.add(rs2.getString(2));
        }
    } catch (SQLException e) {
        try {
            acc.con.close();
        } catch (SQLException e1) {
            e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }

    JSONObject obj = new JSONObject();
    JSONArray jarray = new JSONArray();
    try {
        JSONObject ob = new JSONObject();
        for (int i = 0; i < province_Name.size(); i++) {
            ob=new JSONObject();
            ob.put("Tinh", province_Name.get(i));
            ob.put("Ngay", date_Expired.get(i));
            jarray.add(ob);
        }
        obj.put("Thong tin", jarray);
    } catch (JSONException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
    out.print(obj);

【问题讨论】:

  • 你检查过你的数据库,它是否包含正确的值?
  • 我想显示的数据库中的数据。但是在导出时,它显示这样的重复...
  • 尝试使用Set&lt;String&gt; 而不是List&lt;String&gt; 它将消除重复..

标签: java json arraylist jsonobject


【解决方案1】:

下面是可以帮助你的代码:

public String getJSONFromResultSet(ResultSet rs,String keyName) {
    Map json = new HashMap(); 
    List list = new ArrayList();
    if(rs!=null)
    {
        try {
            ResultSetMetaData metaData = rs.getMetaData();
            while(rs.next())
            {
                Map<String,Object> columnMap = new HashMap<String, Object>();
                for(int columnIndex=1;columnIndex<=metaData.getColumnCount();columnIndex++)
                {
                    if(rs.getString(metaData.getColumnName(columnIndex))!=null)
                        columnMap.put(metaData.getColumnLabel(columnIndex),     rs.getString(metaData.getColumnName(columnIndex)));
                    else
                        columnMap.put(metaData.getColumnLabel(columnIndex), "");
                }
                list.add(columnMap);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        json.put(keyName, list);
     }
     return JSONValue.toJSONString(json);
}

将结果集和您的键名传递给参数并获取 Json 字符串作为响应。

【讨论】:

    【解决方案2】:

    你为什么不试试Google gson。它非常简单易用。查看一些示例here

    【讨论】:

      【解决方案3】:

      这段代码很好用!谢谢。 只是一个小改进,下面这段代码也支持 int 值,并且不会将它们转换为字符串。

      public String getJSONFromResultSet(ResultSet rs,String keyName) {
          Map json = new HashMap(); 
          List list = new ArrayList();
          if(rs!=null)
          {
              try {
                  ResultSetMetaData metaData = rs.getMetaData();
                  while(rs.next())
                  {
                      Map<String,Object> columnMap = new HashMap<String, Object>();
                      for(int columnIndex=1;columnIndex<=metaData.getColumnCount();columnIndex++)
                          String val= response.getString(metaData.getColumnName(columnIndex));
                          String key = metaData.getColumnLabel(columnIndex);
                          if(val== null)
                              columnMap.put(key, "");
                          else if (val.chars().allMatch(Character::isDigit))
                              columnMap.put(key,  Integer.parseInt(val));
                          else
                              columnMap.put(key,  val);
                      }
                      list.add(columnMap);
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              }
              json.put(keyName, list);
           }
           return JSONValue.toJSONString(json);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-06
        • 2020-07-10
        • 2013-11-06
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多