Java: сериализация TreeModel, TableModel в JSON, и наоборот? - PullRequest
0 голосов
/ 24 июня 2011

На стороне клиента указанный пользователем вход создает уникальные TreeModel и TableModel.

Это необходимо сериализовать в JSON для хранения в MongoDB (напрямую хранит документ JSON).

JSON необходимо проанализировать обратно в TreeModel или TableModel, которая будет снова отображаться в программном обеспечении на стороне клиента.

Любая библиотека или существующие коды, которые могут способствовать этому?

Ответы [ 3 ]

1 голос
/ 24 июня 2011

TreeModel и TableModel - это просто интерфейсы без данных, поэтому их нельзя сериализовать. Однако, когда вы говорите о реализации TreeModel, например, DefaultTreeModel вы можете сериализовать его в Json, используя привязка данных Jackson POJO

1 голос
/ 24 июня 2011

Джексон может сделать это за 5 минут

0 голосов
/ 31 октября 2016

Вы можете перебирать данные модели и использовать Джексон для генерации JSON. I.e.:

public static JsonNode getJsonNodeFromModel(DefaultTableModel model) {
    ArrayNode jsonArray = MAPPER.createArrayNode();

    for (int i = 0; i < model.getRowCount(); i++) {
        ObjectNode jsonNode = MAPPER.createObjectNode();

        String name = (String) model.getValueAt(i, 0);
        String command = ((String) model.getValueAt(i, 1)).replace("\\", "\\\\");

        jsonNode.put(model.getColumnName(0), name);
        jsonNode.put(model.getColumnName(1), command);

        jsonArray.add(jsonNode);
    }

    return jsonArray;
}

Тест:

@Test
public void testMethod() {
    Object[] columnNames = new Object[]{"Name", "Shell Command"};
    Object[][] data = {
        {"Open jsonlint.com", "open http://jsonlint.com"},
        {"Open Escape/UnEscape Tool", "open http://www.freeformatter.com/javascript-escape.html"}
    };
    DefaultTableModel model = new DefaultTableModel(data, columnNames);

    JsonNode jsonNode = CommandHelper.getJsonNodeFromModel(model);

    assertEquals("Open jsonlint.com", jsonNode.get(0).get("Name").asText());
    assertEquals("open http://jsonlint.com", jsonNode.get(0).get("Shell Command").asText());
    assertEquals("Open Escape/UnEscape Tool", jsonNode.get(1).get("Name").asText());
    assertEquals("open http://www.freeformatter.com/javascript-escape.html", jsonNode.get(1).get("Shell Command").asText());
}
...