2012-04-28 6 views
7

Konvertieren in ein JSON-Objekt ist das:Wie ein JSON-Objekt zu extrahieren, die

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3}, 
      ...  
      {"id":"BLE10-A0-123-321","weight":"100","quantity":4}], 
"country":"JUS", 
"region":"A", 
... 
"timeout":"FILLER"} 

Um dies:

{"BLE89-A0-123-384": "3", "BLE10-A0-123-321": "4"}, das ist ... {id: Menge}

ich eine Antwort gefunden das macht fast das, was ich brauche: Searching for an Object inside the JSON. Aber diese Antwort hilft mir nicht, weil es nur auf der ersten Ebene ist (ein JSON-Objekt). Mein Problem ist auf der zweiten Ebene (Json-Objekt innerhalb eines JSON-Objekts). Danke im Voraus!

+1

'{" BLE89-A0-123-384 "," 3 "; "BLE10-A0-123-321", "4"} 'Das ist nicht einmal ein gültiges Objekt, es muss ein Schlüsselwertpaar sein. –

+0

Entschuldigung, repariere es! – mrmo123

+0

Was * weißt * du nicht? Wissen Sie, wie Sie auf ein Mitglied eines Arrays oder Objekts zugreifen? Weißt du, wie man ein Array iteriert? Wissen Sie, wie Sie ein Objekt erstellen und ihm neue Schlüssel/Wert-Paare zuweisen? Es wäre gut zu wissen, wofür Sie Hilfe benötigen. –

Antwort

21

Es hilft, wenn Sie nicht von JSON als JSON-Objekt denken Sie. Sobald Sie eine JSON-Zeichenfolge über JSON.parse ausführen, handelt es sich um ein systemeigenes JavaScript-Objekt.

In JavaScript gibt es zwei Möglichkeiten, auf Objekte zuzugreifen.

Punktnotation

Die Punktnotation geht so

myObject.name

den Punkt sehen? Sie können das verwenden, um auf ein beliebiges Objekt zuzugreifen Eigenschaft (die tatsächlich ein anderes Objekt in Javascript sein kann, solange es einen gültigen Punktnotationenname hat). Sie können keine Zeichen wie -, . und das Leerzeichen verwenden.

Bracket Notation (kann ein anderer Name sein)

myObject["variableName"]

Wie Punkt-Notation erlaubt aber einige andere Charaktere, wie - und das Leerzeichen .. Ist genau das Gleiche.

Die Verwendung dieser Notationen ist nützlich, da wir auf verschachtelte Eigenschaften zugreifen können.

myObj.foo.bar.baz()

Lassen Sie uns jetzt auf Ihre JSON-Objekt bekommen ...

{"items":[{"id":"BLE89-A0-123-384","weight":"100","quantity":3,"stock":0},
{"id":"BLE10-A0-123-321","weight":"100","quantity":4,"stock":0}],

Sie könnten sich auf der JSON format auffrischen wollen, aber in Ihrem Beispiel, hier ein paar Hinweise .. .

{ Bedeutet den Start eines Objekts. (Denken Sie daran, dass Ihre gesamte JSON-Zeichenfolge ein Objekt selbst ist.)

} Bedeutet das Ende eines Objekts.

"variable" (mit Anführungszeichen! Wichtig in JSON, aber nicht beim Zugriff/Deklarieren von JavaScript-Objekten) weist Ihrem Objekt eine Eigenschaft zu.

: Ist der Zuweisungsoperator in JSON- und JavaScript-Objekten. Alles auf der rechten Seite der : ist der Wert, den Sie der Eigenschaft auf der linken Seite zuweisen.

, Bedeutet, dass Sie eine neue Eigenschaft innerhalb eines Objekts beginnen.

Sie wissen wahrscheinlich, dass [] mit , Kommas innerhalb bedeutet ein Array.

Wenn wir Ihre Schnur durch JSON.parse(string) ausführen, werden wir ein Objekt erhalten, die so aussieht ...

var myResponse = JSON.parse(response);

Sie können nun als native JavaScript-Objekt verwenden. Was Sie suchen, ist eine geschachtelte Eigenschaft innerhalb von "Elementen".

var items = myResponse.items; //alternatively you could just use myResponse.items

Da items ist ein Array von Objekten, müssen wir durch sie, um iterieren das bestehende Objekt in ein neues Objekt zu konvertieren.

var i; 
var result = {} ; //declare a new object. 
for (i = 0; i < items.length; i++) { 
    var objectInResponse = items[i]; //get current object 
    var id = objectInResponse.id; //extract the id. 
    var quantity = objectInResponse.quantity; 
    result[id] = quantity; //use bracket notation to assign "BLE89-A0-123-384" 
    //instead of id. Bracket notation allows you to use the value 
    // of a variable for the property name. 

Ergebnis ist nun ein Objekt, das wie folgt aussieht: kann

{ 
    "BLE89-A0-123-384" : 3, //additional properties designated by comma 
    "BLE10-A0-123-321" : 4 // The last key/value in an object literal CANNOT 
    // have a comma after it! 
} 

Sie die Eigenschaften Notation Klammer zuzugreifen.

var BLE89 = result["BLE10-A0-123-321"]; //use quotes, otherwise JavaScript will try to look up the value of a variable.

+0

+1 für eine gründliche Erklärung. –

+0

Wow, das ist eine viel gründlichere Antwort als ich für die Frage erwartet: D – epidemian

+0

danke für die tolle Antwort! – mrmo123

0

Sie müssen folgendes tun:


var newJSON = {}; 
for (var i = 0; i < oldJSON.items.length; i++) { 
    newJSON[oldJSON.items[i].id] = oldJSON.items[i].quantity; 
} 
+0

'.length()' muss '.length' sein. Länge ist eine Eigenschaft, keine Funktion. –

2

Sie können mit versuchen:

var obj = { 
    "items":[ 
     {"id":"BLE89-A0-123-384","weight":"100","quantity":3}, 
     {"id":"BLE10-A0-123-321","weight":"100","quantity":4} 
    ], 
    "country":"JUS", 
    "region":"A", 
    "timeout":"FILLER" 
}; 

var quantities = {}; 
obj.items.forEach(function (item) { 
    quantities[item.id] = item.quantity; 
}); 

quantities wird dann {"BLE89-A0-123-384":3,"BLE10-A0-123-321":4} das Objekt sein. forEach ist eine native Methode für Array-Objekte in JavaScript, mit der Sie durch ihre Elemente iterieren können. Sie können diesen Code in eine Funktion einfügen:

function getQuantities(obj) { 
    var quantities = {}; 
    obj.items.forEach(function (item) { 
     quantities[item.id] = item.quantity; 
    }); 
    return quantities; 
} 
+0

danke !!!!!! – mrmo123

Verwandte Themen