Zuerst, Vielen Dank im Voraus für das Lesen dieser. Zweitens, Sorry im Voraus für die lange Post - aber ich hoffe, wie eine gut geschriebene Funktion, das gute Zeug ist an der Spitze - obwohl bitte nehmen Sie sich die Zeit, um alles zu lesen. Drittens habe ich den Überblick verloren, wie viele Stapelfragen ich durchgesehen habe - wenn das immer noch eine Frage ohne Frage ist, entschuldige ich mich.Parsing Komplex JSON Ergebnisse von Neo4j
Ich verwende Node.js, um APIs für meinen AngularJS-Client bereitzustellen. Alle meine Datenaggregation und -transformation wird in Node durchgeführt und dem Client eine flache JSON-Datenstruktur präsentieren.
Ich habe ein Neo4j-Modell, das mich mit den Anwendungen, für die ich verantwortlich bin, in Verbindung bringt und technische Risiken mit allen Anwendungen in Verbindung bringt. Ich habe eine nette Cypher-Abfrage, die mir die technischen Risiken nur für die Anwendungen zeigt, für die ich verantwortlich bin, und schließt alle meine anderen Apps aus, die kein Risiko darstellen. Hier ist ein Bild meiner Abfrageergebnisse: Neo4j Graph result.
Hier ist meine node.js Code (Datei routes.js durch die Haupt api.js Datei genannt):
var router = require('express').Router();
var neo4j = require('neo4j');
var db = new neo4j.GraphDatabase('http://user:[email protected]:7474');
router.get('/techrisks', getTechRisks);
module.exports = router;
function getTechRisks(req, res) {
db.cypher({
query: 'MATCH p=(a)-[e:ARCHITECT_FOR]->(b)-[d:HAS_RISK]->(c) WHERE a.shortname="macdonb" RETURN nodes(p) AS n,relationships(p) AS m',
params: {
}
}, function (err, results) {
if (err) { throw err; }
var result = results[0];
if (!result) {
console.log('No TechRisk found.');
} else {
console.log(results);
console.log(results[0]);
console.log(results[1]);
}
});
}
Der obige Code erzeugt die folgende JSON (mit Separatoren zu den Stücken für Lesbarkeit hinzugefügt) produziert wird diese Ergebnisse:
- - - - console.log(results); - - - -
[ { n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] },
{ n: [ [Object], [Object], [Object] ],
m: [ [Object], [Object] ] } ]
- - - - console.log(results[0]); - - - -
{ n:
[ Node { _id: 585, labels: [Object], properties: [Object] },
Node { _id: 675, labels: [Object], properties: [Object] },
Node { _id: 695, labels: [Object], properties: [Object] } ],
m:
[ Relationship {
_id: 845,
type: 'ARCHITECT_FOR',
properties: [Object],
_fromId: 585,
_toId: 675 },
Relationship {
_id: 813,
type: 'HAS_RISK',
properties: [Object],
_fromId: 675,
_toId: 695 } ] }
- - - - console.log(results[1]); - - - -
{ n:
[ Node { _id: 585, labels: [Object], properties: [Object] },
Node { _id: 674, labels: [Object], properties: [Object] },
Node { _id: 689, labels: [Object], properties: [Object] } ],
m:
[ Relationship {
_id: 844,
type: 'ARCHITECT_FOR',
properties: [Object],
_fromId: 585,
_toId: 674 },
Relationship {
_id: 810,
type: 'HAS_RISK',
properties: [Object],
_fromId: 674,
_toId: 689 } ] }
Die n: array mir Verwechselung. Ich fing an, es manuell auseinander zu reißen (versuche Split und Spleiß mit Strings und Objekten), aber ich glaube, dass es zugänglich sein muss mit einem JSON-Parser. Wenn ich den folgenden als Test verwenden:
var tmpResult1 = JSON.stringify(result.n);
ich eine große String-Darstellung von n:
[{"_id":585,"labels":["Person"],"properties":{"hrpno":"00061627","lastName":"MacDonald","title":"Consultant, IT Architecture","hrdno":"104134","shortname":"macdonb","role":"Systems Architect","displayName":"Bruce MacDonald","firstName":"Bruce"}},{"_id":650,"labels":["Application"],"properties":{"dateverified":"2016-01-19","name":"Portal - Loss Runs","aprmid":"aprm1249"}},{"_id":683,"labels":["TechRisk"],"properties":{"status":"Documented","riskid":"ABC-2012-082","dateEntered":"2012-06-29"}}]
Der String ist schön, aber wenn ich versuche, das Array mit Punkten oder Klammern zu verweisen ich viele "undefinierte" Fehler.
Ich bin ein wenig verloren und bereit, noch ein oder zwei Tage Pause zu machen. Ich habe nach Tutorials auf YouTube gesucht - "ungefähr 49.300 Ergebnisse" (!!!) und von den über 30, die ich mir angeschaut habe, die sich alle mit einfachen Strukturen beschäftigen und "Movies" als Beispiel verwenden.
Nochmals vielen Dank, dass Sie so weit gelesen haben! Ich schätze jede Hilfe oder Hinweise.
Ich habe es versucht und bekam den folgenden Fehler: console.log (result [0]. N [0] .properties.lastName); ^ Typeerror: \ Entwicklung \ ps_jwt \ api \ routes.js: Kann nicht Eigentum 'n' undefinierter bei D lesen 205: 34 auf D: \ Entwicklung \ ps_jwt \ api \ node_modules \ Neo4j \ lib-new \ GraphDatabase.js: 301: 18 Ich habe eine Antwort darauf geschrieben, wie ich schließlich den Stapel von Arrays und Objekten durchgearbeitet habe, obwohl es immer noch nicht die beste Lösung ist. Vielen Dank! –
@BruceMacDonald Ich habe 's' im Ergebnis vergessen. Ich habe meine Antwort bearbeitet. – Shanoor
Hinzufügen der s funktionierte. Ich stimme zu, dass die Antwort, die ich mir ausgedacht habe, verworren ist. Ich brauche fast alle Eigenschaften der 3 Knoten und 2 Beziehungen, die die Ergebnisse zurückgegeben haben. Danke für die Vereinfachung! –