2017-11-10 16 views
0

그림 Excel 데이터, 행 및 열, 모든 열에서 ASC 또는 DESC를 정렬 할 수있는 기능.자바 테이블 형식 데이터를 정렬하고 JSON으로 출력 하시겠습니까?

Java에서이 기능을 복제 한 다음 JSON으로 데이터를 출력하려고합니다.이 JSON 데이터는 쿼리 할 수있는 API 내에 배치되며 특정 열 이름을 기준으로 정렬 된 표 스타일 데이터를 반환합니다.

가장 좋은 방법은 무엇입니까?

JTable은 일 수 있습니다. 도움말, https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting, 현재로서는 JSON 객체로 필터링 된이 데이터를 매핑하는 방법을 잘 모르겠습니다.

모든 포인터/생각?

답변

0

아래 예제를 참조하십시오. 아래에 표시된 GSON 종속성을 사용하여 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); 
    } 
}