Ich habe JSON noch nie zuvor verwendet, daher bin ich mit seiner Syntax nicht vertraut.
Im Moment habe ich mehrere Arrays, die unterschiedliche Daten enthalten.
Ich möchte ein JSON-Objekt erstellen, das mehrere Arrays mit jeweils mehreren Daten enthält.
Z.B
Ein Objekt namens Autos, das mehrere Arrays für eine andere Automarke enthält. In jedem Array befindet sich das Automodell zusammen mit einigen anderen Datentypen, z. B. der Anzahl der Türen (spielt keine Rolle, es ist nur ein fiktives Beispiel).
Es wäre sehr dankbar, wenn jemand die Syntax anhand eines Beispiels erläutern würde.
Antworten:
Auf der äußersten Ebene beginnt ein JSON-Objekt mit a
{
und endet mit a}
.Beispieldaten:
{ "cars": { "Nissan": [ {"model":"Sentra", "doors":4}, {"model":"Maxima", "doors":4}, {"model":"Skyline", "doors":2} ], "Ford": [ {"model":"Taurus", "doors":4}, {"model":"Escort", "doors":4} ] } }
Wenn der JSON einer Variablen namens data zugewiesen ist, sieht der Zugriff folgendermaßen aus:
data.cars['Nissan'][0].model // Sentra data.cars['Nissan'][1].model // Maxima data.cars['Nissan'][2].doors // 2 for (var make in data.cars) { for (var i = 0; i < data.cars[make].length; i++) { var model = data.cars[make][i].model; var doors = data.cars[make][i].doors; alert(make + ', ' + model + ', ' + doors); } }
Ein anderer Ansatz (Verwendung eines assoziativen Arrays für Automodelle anstelle eines indizierten Arrays):
{ "cars": { "Nissan": { "Sentra": {"doors":4, "transmission":"automatic"}, "Maxima": {"doors":4, "transmission":"automatic"} }, "Ford": { "Taurus": {"doors":4, "transmission":"automatic"}, "Escort": {"doors":4, "transmission":"automatic"} } } } data.cars['Nissan']['Sentra'].doors // 4 data.cars['Nissan']['Maxima'].doors // 4 data.cars['Nissan']['Maxima'].transmission // automatic for (var make in data.cars) { for (var model in data.cars[make]) { var doors = data.cars[make][model].doors; alert(make + ', ' + model + ', ' + doors); } }
Bearbeiten:
Korrektur: Ein JSON-Objekt beginnt mit
{
und endet mit}
, es ist jedoch auch gültig, ein JSON-Array (auf der äußersten Ebene) zu haben, das mit beginnt[
und mit endet]
.Außerdem wurden signifikante Syntaxfehler in den ursprünglichen JSON-Daten korrigiert: Alle Schlüsselnamen in einem JSON-Objekt müssen in doppelten Anführungszeichen stehen, und alle Zeichenfolgenwerte in einem JSON-Objekt oder einem JSON-Array müssen ebenfalls in doppelten Anführungszeichen stehen.
Sehen:
quelle
[0,1,2]
während assoziative Arrays geschweifte Klammern verwenden{x:1,y:2,z:3}
. Alle Daten im äußersten Objekt können beide Arten von Arrays sein, das äußerste Objekt selbst muss jedoch geschweifte Klammern verwenden.for (var town in markers.towns) { alert(markers.towns[town].lat) }
Ein gutes Buch, das ich gerade lese: Professionelles JavaScript für Webentwickler von Nicholas C. Zakas 3. Ausgabe enthält die folgenden Informationen zur JSON-Syntax:
In Bezug auf das, an dem Sie interessiert sind, heißt es in Arrays:
var values = [25, "hi", true];
[25, "hi", true]
{ "books": [ { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], "edition": 3, "year": 2011 }, { "title": "Professional JavaScript", "authors": [ "Nicholas C.Zakas" ], "edition": 2, "year": 2009 }, { "title": "Professional Ajax", "authors": [ "Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett" ], "edition": 2, "year": 2008 } ] }
Um ein JavaScript-Objekt in eine JSON-Zeichenfolge zu serialisieren (zu konvertieren), können Sie die JSON-Objekt-Methode stringify () verwenden. Für das Beispiel von Mark Linus antworten Sie:
var cars = [{ color: 'gray', model: '1', nOfDoors: 4 }, { color: 'yellow', model: '2', nOfDoors: 4 }];
Autos ist jetzt ein JavaScript-Objekt. So konvertieren Sie es in ein JSON-Objekt:
var jsonCars = JSON.stringify(cars);
Welche Ausbeuten:
"[{"color":"gray","model":"1","nOfDoors":4},{"color":"yellow","model":"2","nOfDoors":4}]"
Um das Gegenteil zu tun, konvertieren Sie ein JSON-Objekt in ein JavaScript-Objekt (dies wird als Parsing bezeichnet). Sie würden die parse () -Methode verwenden. Suchen Sie nach diesen Begriffen, wenn Sie weitere Informationen benötigen ... oder holen Sie sich das Buch, es enthält viele Beispiele.
quelle
Ein anderes Beispiel:
[ [ { "@id":1, "deviceId":1, "typeOfDevice":"1", "state":"1", "assigned":true }, { "@id":2, "deviceId":3, "typeOfDevice":"3", "state":"Excelent", "assigned":true }, { "@id":3, "deviceId":4, "typeOfDevice":"júuna", "state":"Excelent", "assigned":true }, { "@id":4, "deviceId":5, "typeOfDevice":"nffjnff", "state":"Regular", "assigned":true }, { "@id":5, "deviceId":6, "typeOfDevice":"44", "state":"Excelent", "assigned":true }, { "@id":6, "deviceId":7, "typeOfDevice":"rr", "state":"Excelent", "assigned":true }, { "@id":7, "deviceId":8, "typeOfDevice":"j", "state":"Excelent", "assigned":true }, { "@id":8, "deviceId":9, "typeOfDevice":"55", "state":"Excelent", "assigned":true }, { "@id":9, "deviceId":10, "typeOfDevice":"5", "state":"Excelent", "assigned":true }, { "@id":10, "deviceId":11, "typeOfDevice":"5", "state":"Excelent", "assigned":true } ], 1 ]
Lesen Sie die Arrays
$.each(data[0], function(i, item) { data[0][i].deviceId + data[0][i].typeOfDevice + data[0][i].state + data[0][i].assigned });
Verwenden Sie http://www.jsoneditoronline.org/ , um den JSON-Code besser zu verstehen
quelle
var cars = [ manufacturer: [ { color: 'gray', model: '1', nOfDoors: 4 }, { color: 'yellow', model: '2', nOfDoors: 4 } ] ]
quelle
cars
>manufacturer
>model, color, doors
. (Arrays innerhalb von Arrays innerhalb eines Objekts)Übergeben Sie mit der folgenden Methode einen beliebigen Wert, der ein beliebiges Array ist:
Eingabeparameter: url, wie Beispiel: "/ node / [beliebiger int-Wert des Arrays] / anyKeyWhichInArray" Beispiel: "cars / Nissan / [0] / model"
Es kann für jede Antwort verwendet werden:
public String getResponseParameterThroughUrl(Response r, String url) throws JsonProcessingException, IOException { String value = ""; String[] xpathOrder = url.split("/"); ObjectMapper objectMapper = new ObjectMapper(); String responseData = r.getBody().asString(); JSONObject jsonObject = new JSONObject(responseData); byte[] jsonData = jsonObject.toString().getBytes(); JsonNode rootNode = objectMapper.readTree(jsonData); JsonNode node = null; for(int i=1;i<xpathOrder.length;i++) { if(node==null) node = rootNode; if(xpathOrder[i].contains("[")){ xpathOrder[i] = xpathOrder[i].replace("[", ""); xpathOrder[i] = xpathOrder[i].replace("]", ""); node = node.get(Integer.parseInt(xpathOrder[i])); } else node = node.path(xpathOrder[i]); } value = node.asText(); return value; }
quelle