2017-04-03 3 views
-1

Ich habe ein JSON-Array wie folgt:convert JSON Array zu ausgewählten Schlüssel JSON Array

[{ 
"id": 1, 
"name": "Leanne Graham", 
"username": "Bret", 
"email": "[email protected]", 
"address": { 
    "street":"201 S 4th St.", 
    "suite": "Apt. 556", 
    "city": "Gwenborough", 
    "zipcode": "92998-3874", 
    "geo": { 
    "lat": "-37.3159", 
    "lng": "81.1496" 
    } 
}, 
"company": { 
    "name": "Romaguera-Crona", 
    "catchPhrase": "Multi-layered client-server neural-net", 
    "bs": "harness real-time e-markets" 
}, 
"hobbies":[ 
     { 
      "books":"fiction", 
      "sports":"football", 
      "music":"rock" 
     }, 

     { 
      "books":"action", 
      "sports":"cricket", 
      "music":"jazz" 
     }, 
     { 
      "books":"action", 
      "sports":"cricket", 
      "music":"cool" 
     }, 

]},{ 
"id":2, 
"name": "Leanne Graham", 
"username": "Bret", 
"email": "[email protected]", 
"address": { 
    "street": "Kulas Light", 
    "suite": "Apt. 556", 
    "city": "Gwenborough", 
    "zipcode": "92998-3874", 
    "geo": { 
    "lat": "-37.3159", 
    "lng": "81.1496" 
    } 
}, 
"phone": ["1-770-736-8031 x56442", "4087917884", "4089088939"], 
"website": "hildegard.org", 
"dept":[{"name":"divya", "address":"abc"},{"name":"divya1", "address":"abc1"}], 
"hobbies":[ 
      { 
      "books":"fiction", 
      "sports":"football", 
      "music":"rock" 
      }, 

      { 
      "books":"action", 
      "sports":"cricket", 
      "music":"jazz" 
      }, 
      { 
      "books":"action", 
      "sports":"cricket", 
      "music":"cool" 
      }, 
]}] 

ich nur bestimmte Schlüssel nur in Hobby Schlüssel verwenden wollte. Sagen wir, ich brauche nur Bücher und Sport von Hobbys. Wie kann ich das in Nodejs machen? Das Ergebnis sollte wie unten sein:

[{ 
"id": 1, 
"name": "Leanne Graham", 
"username": "Bret", 
"email": "[email protected]", 
"address": { 
    "street":"201 S 4th St.", 
    "suite": "Apt. 556", 
    "city": "Gwenborough", 
    "zipcode": "92998-3874", 
    "geo": { 
    "lat": "-37.3159", 
    "lng": "81.1496" 
    } 
}, 
"company": { 
    "name": "Romaguera-Crona", 
    "catchPhrase": "Multi-layered client-server neural-net", 
    "bs": "harness real-time e-markets" 
}, 
"hobbies":[ 
     { 
      "books":"fiction", 
      "sports":"football", 

     }, 

     { 
      "books":"action", 
      "sports":"cricket", 

     }, 
     { 
      "books":"action", 
      "sports":"cricket", 

     }, 

] },{ 
"id":2, 
"name": "Leanne Graham", 
"username": "Bret", 
"email": "[email protected]", 
"address": { 
    "street": "Kulas Light", 
    "suite": "Apt. 556", 
    "city": "Gwenborough", 
    "zipcode": "92998-3874", 
    "geo": { 
    "lat": "-37.3159", 
    "lng": "81.1496" 
    } 
}, 
"phone": ["1-770-736-8031 x56442", "4087917884", "4089088939"], 
"website": "hildegard.org", 
"dept":[{"name":"divya", "address":"abc"},{"name":"divya1", "address":"abc1"}], 
"hobbies":[ 
      { 
      "books":"fiction", 
      "sports":"football", 

      }, 

      { 
      "books":"action", 
      "sports":"cricket", 

      }, 
      { 
      "books":"action", 
      "sports":"cricket", 

      }, 
]}]. 

Bitte beachten Sie, dass dies nur ein Beispiel ist. meine Eingabe ist ein Array von JSON und die Schlüssel, die ich behalten wollte. Schlüssel für dieses Beispiel sind "id", "name", "hobbys.books", "hobbys.sports" etc.

+0

Egal was, Sie müssen lernen, auf Array-Elemente und Objekteigenschaften zuzugreifen. Dies führt zu einem grundlegenden Mangel an Verständnis für JavaScript-Grundlagen. – PHPglue

Antwort

0

Wenn Sie Knoten verwenden, würde ich das Rad nicht neu erfinden. So könnten Sie etwas wie die lodash Funktion neben map verwenden. Zum Beispiel:

const filteredHobbies = theObject.hobbies.map(item => _.pick(item, ['books', 'sports'])) 
0

Sie können Array.map() verwenden.

hobbies.map(function(hobby) { 
    return { 
     books: hobby.books, 
     sports: hobby.sports, 
    } 
}); 

In diesem Fall erstellen Sie ein neues Array mit Werten, die Sie speziell in der Funktion zurückgegeben haben.

Wenn Sie ES6 verwenden, können Sie auch die fett Pfeil Syntax und andere „Shortcuts“

hobbies.map((hobby) => ({ 
    books: hobby.books, 
    sports: hobby.sports, 
}); 

Führen Sie einfach, dass jede Reihe, die Sie bearbeiten möchten. Vorausgesetzt, dass Ihr Objekt namens json, würde Ihre Funktion wie folgt aussehen:

const json = [] // your existing JSON 

const filtered = json.map((obj) => ({ 
    id: obj.id, 
    name: obj.name, 
    hobbies: obj.hobbies.map((hobby) => ({ 
     books: hobby.books, 
     sports: hobby.sports, 
    })), 
})); 
+0

Danke für deine Antwort, aber das Problem ist, dass ich nicht weiß, dass der Schlüsselname Hobbies ist. es könnte alles in meiner Variable gespeichert sein. Also brauche ich die generische Lösung, wo ich mein JSON-Array in einer Variablen habe und eine andere Variable oder ein Array Werte enthält hobbies.books und hobbys.sports – realcodes

+0

Wie wird bestimmt, welche Schlüssel du brauchst? Ist das etwas, das du erfunden hast, oder gibt es eine API, der du folgst? –

+0

Ja, ich habe eine externe API, die mir JSON-Daten gibt und basierend auf der Benutzerauswahl von Schlüsseln muss ich nur diese Daten anzeigen – realcodes

0

Sie können die Hobby-Array schnitzen und dann:

for(var h of hobbies) { 
    delete h.music; 
} 

Der endgültige Code wie etwas aussehen könnte:

var hob = object.hobbies; 
for(var h of hob) { 
    delete h.music; 
} 
object.hobbies = hob;