0

クライアント側では、ユーザー指定の入力により、一意のTreeModelとTableModelが作成されます。

これは、MongoDBに保存するためにJSONにシリアル化する必要があります(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 を生成できます。すなわち:

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 に答える