Java对表格数据进行排序并输出到JSON?

时间:2017-11-10 10:13:42

标签: java sorting jtable columnsorting gridview-sorting

图片Excel数据,行和列,能够对任何列上的ASC或DESC进行排序。

我希望在Java中复制此功能,然后将数据输出到JSON中 - 此JSON数据被放置在可以查询的API中,并返回基于特定列名称排序的表格样式数据。

最好的方法是什么?

JTable似乎看起来像可能帮助https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting,尽管我目前还不确定如何将这些过滤后的数据映射到JSON对象中。

任何指针/想法?

1 个答案:

答案 0 :(得分:0)

请参阅下面的示例。我使用下面显示的G​​SON依赖项将Vector转换为JSON字符串。我使用JTable.convertRowIndexToModel()API以正确的顺序获取表行。

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.6.2</version>
</dependency>

public class TableDataToJson {

  public static void main(String[] args) {

    JFrame frame = new JFrame("Table data to JSON");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final DefaultTableModel tableModel = new DefaultTableModel(
        new Object[][] {{"Sugar", 14}, {"Eggs", 8}, {"Butter", 12}, {"Flour", 10}},
        new Object[] {"Item name", "Price"}) {

      @Override
      public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex == 1) {
          return Integer.class;
        }
        return super.getColumnClass(columnIndex);
      }
    };
    final JTable table = new JTable(tableModel);
    table.setAutoCreateRowSorter(true);

    JButton button = new JButton("Print JSON");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Vector vectorInModelOrder = tableModel.getDataVector();
        Vector vectorInViewOrder = new Vector();
        for (int i = 0; i < vectorInModelOrder.size(); i++) {
          vectorInViewOrder.add(vectorInModelOrder.get(table.convertRowIndexToModel(i)));
        }

        Gson gson = new Gson();
        System.out.println(gson.toJson(vectorInViewOrder));
      }
    });

    frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    frame.getContentPane().add(button, BorderLayout.SOUTH);
    frame.pack();
    frame.setVisible(true);
  }
}