Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将SQL数据映射到Java JSON对象和JSON数组?_Java_Mysql_Json - Fatal编程技术网

如何将SQL数据映射到Java JSON对象和JSON数组?

如何将SQL数据映射到Java JSON对象和JSON数组?,java,mysql,json,Java,Mysql,Json,我正在用Java构建JSON对象,并希望将它们发送到JSON数组中,这一切都是因为我的数据库中存在未排序的数据。我无法将数据映射到正确的格式。我认为我缺乏逻辑 下面是MySQL中我的数据库表的图像: 我想为这个表创建一个JSON格式,如下所示: [ { "1": "450", "2": "495", "OUTLET": "TOTTAL2", "BILLDATE": "", "TOTAL": "945" }, { "1": "10"

我正在用Java构建JSON对象,并希望将它们发送到JSON数组中,这一切都是因为我的数据库中存在未排序的数据。我无法将数据映射到正确的格式。我认为我缺乏逻辑

下面是MySQL中我的数据库表的图像:

我想为这个表创建一个JSON格式,如下所示:

  [
  {
    "1": "450",
    "2": "495",
    "OUTLET": "TOTTAL2",
    "BILLDATE": "",
    "TOTAL": "945"
  },
  {
    "1": "10",
    "2": "15",
    "OUTLET": "Ol1",
    "BILLDATE": "08-21-2018",
    "TOTAL": "25"
  },
  {
    "1": "20",
    "2": "25",
    "OUTLET": "ol1",
    "BILLDATE": "08-22-2018",
    "TOTAL": "45"
  },
  {
    "1": "30",
    "2": "35",
    "OUTLET": "ol1",
    "BILLDATE": "08-23-2018",
    "TOTAL": "65"
  },
  {
    "1": "40",
    "2": "45",
    "OUTLET": "ol2",
    "BILLDATE": "08-21-2018",
    "TOTAL": "85"
  },
  {
    "1": "50",
    "2": "55",
    "OUTLET": "ol2",
    "BILLDATE": "08-22-18",
    "TOTAL": "105"
  },
  {
    "1": "60",
    "2": "65",
    "OUTLET": "ol2",
    "BILLDATE": "08-23-2018",
    "TOTAL": "125"
  },
  {
    "1": "70",
    "2": "75",
    "OUTLET": "ol3",
    "BILLDATE": "08-21-2018",
    "TOTAL": "145"
  },
  {
    "1": "80",
    "2": "85",
    "OUTLET": "ol3",
    "BILLDATE": "08-22-2018",
    "TOTAL": "165"
  },
  {
    "1": "90",
    "2": "95",
    "OUTLET": "ol3",
    "BILLDATE": "08-23-201818",
    "TOTAL": "185"
  }
]
上面的JSON是我想要的输出。但我无法映射循环中的数据,或者我无法获得逻辑。我只想为html表创建一个JSON格式,我还提供了我想要的JSON

我落后的地方在于编码和逻辑思维,即如何循环数据以获得所需的格式:

这就是我要做的桌子

我了解java中的GSON来解析json(在java中发送json),所以我可以做到这一点,我唯一想做的就是喜欢如何编写代码

这是我的Java代码,通过它我可以得到第一个头

    String TotalAmountWithDateSql = "quwry1";
//          System.out.println("TotalAmountWithDateSql"+TotalAmountWithDateSql);
            String GrandTotalSql = "query2";
//          System.out.println("grandTotal"+GrandTotalSql);

            try {
                con = DBConnection.createConnection();
                statement = con.createStatement();

                ResultSet resultSet = statement.executeQuery(GrandTotalSql);

                while (resultSet.next()) {

                    map.put("OUTLET/HOURS", "  ALL");
                    GrandTotal = resultSet.getLong("TOTAL");
                    map.put("TOTAL", GrandTotal);

                    resultSet = statement.executeQuery(TotalAmountWithDateSql);
                    while (resultSet.next())

                    {

                        BillTime = resultSet.getString("TIME");
                        NetAmtWithTime = resultSet.getLong("AMOUNT");
                        map.put(BillTime, NetAmtWithTime);
                    }
                    list.add(map);
                    str = gson.toJson(list);
                }
                System.out.println("value  " + str);
                response.setContentType("application/json");
                response.getWriter().write(str);
从这段Java代码中,我得到了

现在我想调用下面的数据,就像我上传的JSON一样,但这只是给我第一个标题:


这确实很简单。您需要获取所有记录并创建一个包含map对象的列表,其中每个map对象将包含您想要的五个键值对

以下是您需要编写的代码类型

public static void main(String[] args) throws IOException {
    createJson();
}

public static List<Map<String, String>> getMapList(ResultSet rs) throws SQLException {
    List<Map<String, String>> mapList = new ArrayList<Map<String,String>>();

    while(rs.next()) {
        Map<String, String> map = new LinkedHashMap<String, String>();
        map.put("1", rs.getString("col1"));
        map.put("2", rs.getString("col2"));
        map.put("OUTLET", rs.getString("outlet"));
        map.put("BILLDATE", rs.getString("billdate"));
        map.put("TOTAL", rs.getString("total"));
        mapList.add(map);
    }
    return mapList;
}

public static void createJson() {
    List<Map<String, String>> mapList = new ArrayList<Map<String,String>>();

    Map<String, String> map1 = new LinkedHashMap<String, String>();
    map1.put("1", "50");
    map1.put("2", "55");
    map1.put("OUTLET", "ol2");
    map1.put("BILLDATE", "08-22-18");
    map1.put("TOTAL", "105");

    Map<String, String> map2 = new LinkedHashMap<String, String>();
    map2.put("1", "60");
    map2.put("2", "65");
    map2.put("OUTLET", "ol3");
    map2.put("BILLDATE", "08-23-18");
    map2.put("TOTAL", "125");

    mapList.add(map1);
    mapList.add(map2);

    String json = new Gson().toJson(mapList);
    System.out.println(json);
}
publicstaticvoidmain(字符串[]args)引发IOException{
createJson();
}
公共静态列表getMapList(ResultSet rs)引发SQLException{
List mapList=new ArrayList();
while(rs.next()){
Map Map=newlinkedhashmap();
map.put(“1”,rs.getString(“col1”);
map.put(“2”,rs.getString(“col2”);
map.put(“OUTLET”,rs.getString(“OUTLET”);
map.put(“BILLDATE”,rs.getString(“BILLDATE”);
map.put(“总计”,rs.getString(“总计”);
地图列表。添加(地图);
}
返回地图列表;
}
公共静态void createJson(){
List mapList=new ArrayList();
Map map1=新建LinkedHashMap();
map1.投入(“1”、“50”);
map1.put(“2”、“55”);
map1.put(“出口”、“ol2”);
图1.put(“账单日期”,“08-22-18”);
map1.put(“总计”、“105”);
Map map2=新建LinkedHashMap();
map2.put(“1”、“60”);
map2.put(“2”、“65”);
map2.put(“出口”、“ol3”);
map2.put(“账单日期”,“08-23-18”);
map2.put(“总计”、“125”);
mapList.add(map1);
mapList.add(map2);
字符串json=new Gson().toJson(映射列表);
System.out.println(json);
}

希望这有帮助。

让我们后退一步,尝试用SQL完成所有工作。MySQL可以使用(类似于标准SQL)计算总计,您不需要两次往返。此外,MySQL支持(某种程度上)标准,所以您不必在Java中进行任何格式化

首先,让我们尝试在不生成JSON的情况下编写SQL查询:
选择
案例
--总数的标签
分组(出口)=1时,则为“总计2”
--防止在每个插座组的第2行+上打印插座
当row_number()超过(按门店顺序按billdate划分)=1时,则为门店
作为出口结束,
比尔达特,
总和(netAmount)为“总计1/Ho…”,
--根据你的数据,这只是一个愚蠢的假设。
--你的实际公式可能更复杂
总和(mod(hours,2)=1,然后是netAmount END)为'1`,
总和(当mod(小时数,2)=0时,则netAmount结束)为'2`
--可能更多?
从t
按门店分组,带汇总的billdate
--仅获取总计或普通分组
分组(出口)=1或分组(billdate)=0
--如果需要,可以在此处添加ORDER BY以获得所需的订单
接下来,让我们生成JSON 为简单起见,我不会重写上面的整个查询,而是将其放在CTE中,这是一个构造SQL的便捷工具:

与
塔斯(
--复制粘贴上一个查询到这里
)
挑选
json_ArrayAg(json_对象(
'1',t.'1`,
‘2’,t.‘2’,
“出口”,t.出口,
“BILLDATE”,t.BILLDATE,
“总计”,t.TOTAL
))
从t


注意,您也可以使用第三方库,如jOOQ,或(免责声明,我为jOOQ背后的公司工作)。

,例如编写
SELECT
语句,使用JDBC、JPA或其他方法检索数据,将数据处理成所需的形式,从内存中的数据结构生成JSON。简言之,就目前的问题而言,它太宽泛了。@Andreas我正在使用一个查询的哈希映射,我正在调用outlets并将它们存储到list中,然后根据第一个查询的大小运行下一个查询以获取日期,但我无法将它们循环到{}。不要试图在注释中用文本进行解释。编辑问题,在那里解释,显示你的代码,并解释你的具体位置。然后,你甚至可以像我硬编码一样,用hashmap键编写它们。不用硬编码“1”和“2”,您可以编写rs.getString(“yourcolumnname”),当然,如果您遇到任何问题,请告诉我。您可以按原样运行我的代码,它将完全按照您的需要输出json字符串。您的架构不清晰,因为您附加的图像没有显示所有列。如果您可以共享模式,甚至查询,我将能够更好地帮助您。