Библиотека для преобразования POJO в формат Cytoscape.js JSON.

Я работаю над проектом, который требует создания сервлета на Java для подачи JSON клиенту для отображения в Cytoscape.js.

Формат JSON выглядит так:

var cy = cytoscape({
  /* ... */

  container: document.getElementById('cy'),

  elements: {
    nodes: [
      { data: { id: 'foo' } }, // NB no group specified

      { data: { id: 'bar' } },

      {
        data: { weight: 100 }, // elided id => autogenerated id 
        group: 'nodes',
        position: {
          x: 100,
          y: 100
        },
        classes: 'className1 className2',
        selected: true,
        selectable: true,
        locked: true,
        grabbable: true
      }
    ],

    edges: [
      { data: { id: 'baz', source: 'foo', target: 'bar' } } // NB no group specified
    ]
  }

  /* ... */
});

В настоящее время я генерирую свой JSON с помощью методов, которые выглядят следующим образом:

private JSONObject genJsonNode(SimpleNode node) throws JSONException
{
    JSONObject jNode = new JSONObject();
    JSONObject data = new JSONObject();
    JSONObject position = new JSONObject();

    data.put("id",  node.getId());
    position.put("x", node.getX());
    position.put("y", node.getY());

    jNode.put("data", data);
    jNode.put("position", position);



    return jNode;
}

Мне интересно, есть ли библиотека, которая уже делает это для меня.

Ответы (1)

С помощью Gson вы можете легко конвертировать POJO в JSON, например:

import com.google.gson.*;

class ElementData {

    String id;
    Integer weight;
    // ...
}

class Node {

    final ElementData data = new ElementData();
    String group;
    String classes;
    boolean selected;
    // ...
}

class Edge {

    final ElementData data = new ElementData();
    // ...
}

class GraphElements {

    final List<Node> nodes = new ArrayList<>();
    final List<Edge> edges = new ArrayList<>();

}

class Graph {

    final GraphElements elements = new GraphElements();
}

void printSampleGraph() {
    Graph g = new Graph();
    Node n1 = new Node();
    n1.data.id = "foo";
    g.elements.nodes.add(n1);
    Node n2 = new Node();
    n2.data.id = "bar";
    g.elements.nodes.add(n2);
    Edge e = new Edge();
    e.data.id = "baz";
    g.elements.edges.add(e);    

    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    String json = gson.toJson(g);
    System.out.println(json);

}

При вызове printSampleGraphбудет напечатан следующий вывод:

{
  "elements": {
    "nodes": [
      {
        "data": {
          "id": "foo"
        },
        "selected": false
      },
      {
        "data": {
          "id": "bar"
        },
        "selected": false
      }
    ],
    "edges": [
      {
        "data": {
          "id": "baz"
        }
      }
    ]
  }
}