下記の私の例を参照してください。私は以下の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);
}
}