2017-12-16 1 views
0

Ich habe die folgende JSON-Datenstruktur. Ich würde gerne wissen, wie ich die Daten extrahieren könnte, die die Schlüssel liefern.JSON-Daten mit Leerzeichen

"Meta Data": { 
    "1. Information": "High School", 
    "2. Name": "St Marys" 
}, 
"Teachers' Names": { 
    "Grade I": { 
     "1. English": "Amanda Fernandez", 
     "2. Sociology": "Christina Andrew", 
     "3. Applied Science": "George Binu" 
    }, 
    "Grade II": { 
     "1. English": "Gedfd Hkdfd", 
     "2. Sociology": "lksdg klsdfd", 
     "3. Applied Science": "some one else" 
    } 
    } 
} 

Ich benutze NodeJS und erhalten diese Daten in einem ‚Körper‘ Objekt unter Anforderungsmodul. Wie extrahiere ich den oben genannten Englisch-Lehrer-Namen? Ich habe versucht, Körper [ "Teachers' Names] [0], um zu sehen, ob es mir zumindest die Grade geben würde ich in voller widersprechen. Aber es kam nicht. Kann mir bitte jemand helfen?

+0

Ist das 'body' immer in der gleichen Struktur oder wird es dynamisch generiert? – Siggy

+0

Die Struktur ist identisch, aber die Daten werden dynamisch generiert, basierend auf dem, nach dem ich die API frage. – SamT

+0

Angenommen, Sie haben immer "Meta Data" und "Teachers Names" und nur die untergeordneten Elemente ändern sich ... Sie können "Object.keys" oder eine "for..in" -Schleife verwenden, um die Eigenschaften zu durchlaufen. Wenn Sie einen bestimmten Wert wünschen, sollten Sie nicht alle Eigenschaften des Objekts durchlaufen. – Siggy

Antwort

0

Es gibt mehrere Möglichkeiten, dasselbe Ziel zu erreichen (wie immer). Aber um Ihre Frage hier zu beantworten, gehen wir mit einem Weg, um Ihr Ziel zu erreichen.

const body = { 
 
    "Meta Data": { 
 
    "1. Information": "High School", 
 
    "2. Name": "St Marys" 
 
    }, 
 
    "Teachers' Names": { 
 
    "Grade I": { 
 
     "1. English": "Amanda Fernandez", 
 
     "2. Sociology": "Christina Andrew", 
 
     "3. Applied Science": "George Binu" 
 
    }, 
 
    "Grade II": { 
 
     "1. English": "Gedfd Hkdfd", 
 
     "2. Sociology": "lksdg klsdfd", 
 
     "3. Applied Science": "some one else" 
 
    } 
 
    } 
 
} 
 

 
// to access known keys you could do it like this 
 
console.log(data['Teachers\' Names']['Grade I']['1. English']) // this will output "Amanda Fernandez"

+0

Vielen Dank für die Zeit zu helfen. Das funktioniert. – SamT

1
var grade1 = body["Teachers' Names"]["Grade I"]; 

Da Sie Zugriff auf ein Objekt, kein Array, sollten Sie die Eigenschaftsnamen anstelle von Ganzzahl-Index verwenden.

Als Antwort auf Ihren Kommentar, wenn Sie die erste Klasse erhalten möchten einfach durch Angabe der Int 0 statt der Zeichenfolge "Grade I "Sie können folgendes tun:

var teachersNames = body["Teachers' Names"]; 
var first = teachersNames[Object.keys(teachersNames)[0]]; 

Hier können Sie die Funktion Object.keys verwenden zu g et und Array der Eigenschaftsnamen und dann das nullte Element in diesem Array und dann dieses Element als Schlüssel in das Objekt teachersNames.

wenn Sie dann den „1. English“ Wert möchten Sie tun können:

var result = first["1. English"]; 

Das ist ziemlich grausam und deutet an, dass Sie Ihre Json anders besser zu strukturieren in Betracht ziehen sollten, um Ihre Bedürfnisse zu erfüllen. Wie zum Beispiel die Verwendung von Arrays anstelle von Objekten.

+0

Das funktioniert. Vielen Dank. In meiner Geschäftslogik möchte ich nur den ["1. English"] Wert aus dem [Teachers 'Names] -Objekt nehmen, ohne die Note I anzugeben. Mit anderen Worten, ich möchte nur das erste Teachers'Names-Objekt und Extrahieren Sie die Namen der Fachlehrer? Gibt es eine Möglichkeit, das zu tun? – SamT

+0

@SamT sehe meine modifizierte Antwort. – bhspencer

0

Sie können sich entweder auf Schlüssel als @bhspencer-Erwähnungen beziehen, unter Verwendung von " s, wenn der Schlüssel ' enthält, und umgekehrt. Sie können auch ein Zitat in der Zeichenfolge mit \ auskommentieren oder es6-Vorlage-Literale verwenden, wenn sie verfügbar sind.

Manche Leute mögen diese anderen Routen, wenn Dinge zu komplex werden und sie Konsistenz wollen, oder um Style Guide Tests zu bestehen.

+0

Ich bin mir nicht sicher, ob ich Ihre Rechtfertigung dafür verstehe, eine einfache Anführungszeichenfolge zu verwenden und das Apostroph zu umgehen. Könnten Sie mehr dazu sagen, warum das mit Konsistenz hilft? – bhspencer

+0

@bhspencer Dies ist kein gutes Beispiel für dieses Szenario - Ich werde für diesen Punkt bearbeiten, danke – max