2016-11-03 3 views
0

Ich verwende eingebettete Datenbank für Neo4j, aber es fehlt eine bequeme Methode, um Ergebnisse mit JSON-Format anzuzeigen, wenn Knoten oder Beziehungen (nicht Eigenschaften) sind angezeigt werden. Es gibt eine nahe Lösung für Neo4j 2.x, aber nicht 3.x.Convert eingebettetes Neo4j 3.x (nicht 2.x) Ergebnis zu JSON (Java)

z.B. Ich möchte, dass der Knoten etwa Folgendes anzeigt:

ohne Rücksicht darauf, was innerhalb des Knotens ist. Gibt es einen guten Weg, dies zu tun?

Maven-Abhängigkeit für eingebettete Neo4j 3.0.6

<dependency> 
    <groupId>org.neo4j</groupId> 
    <artifactId>neo4j</artifactId> 
    <version>3.0.6</version> 
</dependency> 

Beispielcode

package TestCypher3b.TestCypher3b; 
import java.io.File; 
import java.util.Arrays; 
import java.util.List; 
import org.neo4j.graphdb.GraphDatabaseService; 
import org.neo4j.graphdb.Node; 
import org.neo4j.graphdb.Result; 
import org.neo4j.graphdb.factory.GraphDatabaseFactory; 

public class App 
{ 
    public static void main(String[] args) 
    { 

     GraphDatabaseFactory graphDbFactory = new GraphDatabaseFactory(); 
     final GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase(new File("data/dbName")); 


     List<String> queries = Arrays.asList(new String[]{ 
       "match (a) delete a;", 
       "create (a:User {name:'Adam', age:100, children:['a','b','c']});", 
       "create (a:User {name:'Eve', age:200, properties:[]});", 
       "create (a:User {name:'Steve', age:300});", 
     }); 

     queries.forEach(q -> { 
      Result result = graphDb.execute(q); 
      // System.out.println(result.resultAsString()); 
     }); 
     Result result = graphDb.execute("match (a) return a;"); 

     // String jsonOut = ...something like result.forEachRemaining(n -> toJson(n)... 

     System.out.println(jsonOut); 

    } 
} 

(FYI, Serializer wie Gson und Jackson nicht aus der Box nicht funktioniert)

+0

Ihre Beispielanzeige ist ungültig JSON; Möchten Sie nur eine Zeichenfolgendarstellung oder möchten Sie ein echtes JSON-Objekt mit interner ID, Beschriftungen und Eigenschaften? –

+0

Oh, du hast Recht! Ja, ich denke, das ist kein gültiges JSON - ein echtes JSON-Objekt ist wünschenswert, aber wenn die Lösung nah genug ist, ist es in Ordnung. – Shin

Antwort

0

Versuchen Sie dies:

MATCH (n) RETURN PROPERTIES(n); 

Die Funktion PROPERTIES wurde kürzlich hinzugefügt.

+0

Inhalt des Ergebnisobjekts muss in JSON-Zeichenfolge in Java konvertiert werden, anstatt die Cypher-Abfrage selbst zu ändern. Nachdem das Ergebnis abgerufen wurde, wird kein Cypher-Code ausgeführt. – Shin

0

Wenn Sie bei the source für das Node-Objekt in Java suchen, finden Sie alle Informationen, die Sie für einen Knoten einen vollständigen Satz von Daten zu erhalten, brauchen: Node.asMap() Objekte, Node.labels() für Etiketten und Node.id() für die interne ID werden im Grunde alles, was es zu einem Knoten gibt, also können Sie ein JSON-Objekt bauen, um diese Struktur selbst ziemlich trivial nachzuahmen. Das Attribut id, das hier verwendet wird, ist wiederum das interne Attribut, so dass Sie sich nicht auf eine langfristige Verwendung verlassen können, aber es wird in einer bestimmten Ergebnismenge eindeutig sein (so dass Sie es als Map-Schlüssel verwenden können) Track-Knoten, zB).

Verwandte Themen