【问题标题】:Java: serialize TreeModel, TableModel to JSON, and vice versa?Java:将 TreeModel、TableModel 序列化为 JSON,反之亦然?
【发布时间】:2011-06-24 04:24:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java json tablemodel treemodel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      杰克逊可以在5 minutes这样做

      【讨论】:

        【解决方案3】:

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

        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());
        }
        

        【讨论】:

          猜你喜欢
          • 2013-08-09
          • 2010-11-16
          • 1970-01-01
          • 2014-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多