Ich arbeite an einem Projekt, bei dem ein Servlet in Java erstellt werden muss, um JSON für den Client zur Anzeige in Cytoscape.js bereitzustellen.
Das JSON-Format sieht folgendermaßen aus:
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
]
}
/* ... */
});
Derzeit generiere ich mein JSON mit Methoden, die so aussehen:
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;
}
Ich frage mich, ob es eine Bibliothek gibt, die das bereits für mich tut.
Mit Gson können Sie POJOs einfach in JSON konvertieren, zB:
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);
}
Beim Aufrufen printSampleGraph
wird die folgende Ausgabe gedruckt:
{
"elements": {
"nodes": [
{
"data": {
"id": "foo"
},
"selected": false
},
{
"data": {
"id": "bar"
},
"selected": false
}
],
"edges": [
{
"data": {
"id": "baz"
}
}
]
}
}