0

在客户端,用户指定的输入创建唯一的 TreeModel 和 TableModel。

这需要序列化为 JSON 以存储在 MongoDB 上(直接存储 JSON 文档)。

JSON 需要被解析回 TreeModel 或 TableModel,它们将在客户端软件上再次呈现。

任何可以促进这一点的图书馆或现有代码?

4

3 回答 3

1

杰克逊可以在5分钟内完成

于 2011-06-24T05:59:41.657 回答
1

TreeModel 和 TableModel 只是没有数据的接口,因此它们不能被序列化。但是,当您谈论 TreeModel 实现(例如 DefaultTreeModel)时,您可以使用Jackson POJO 数据绑定将其序列化为 Json

于 2011-06-24T08:12:13.167 回答
0

您可以遍历模型的数据并使用jackson生成 json。IE:

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());
}
于 2016-10-31T13:58:13.823 回答