Ich verwende Sencha Touch (ExtJS), um eine JSON-Nachricht vom Server zu erhalten. Die Nachricht, die ich erhalte, ist folgende:
{
"success": true,
"counters": [
{
"counter_name": "dsd",
"counter_type": "sds",
"counter_unit": "sds"
},
{
"counter_name": "gdg",
"counter_type": "dfd",
"counter_unit": "ds"
},
{
"counter_name": "sdsData",
"counter_type": "sds",
"counter_unit": " dd "
},
{
"counter_name": "Stoc final",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "Consum GPL",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "sdg",
"counter_type": "dfg",
"counter_unit": "gfgd"
},
{
"counter_name": "dfgd",
"counter_type": "fgf",
"counter_unit": "liggtggggri "
},
{
"counter_name": "fgd",
"counter_type": "dfg",
"counter_unit": "kwfgf "
},
{
"counter_name": "dfg",
"counter_type": "dfg",
"counter_unit": "dg"
},
{
"counter_name": "gd",
"counter_type": "dfg",
"counter_unit": "dfg"
}
]
}
Mein Problem ist, dass ich dieses JSON-Objekt nicht analysieren kann, damit ich jedes der Zählerobjekte verwenden kann.
Ich versuche das so zu erreichen:
var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
console.log(counter.counter_name);
}
Was mache ich falsch ? Danke dir!
javascript
json
extjs
Maephisto
quelle
quelle
Antworten:
Javascript hat eine eingebaute JSON-Analyse für Zeichenfolgen, die Sie meiner Meinung nach haben:
Dies mit Ihrem Beispiel zu verwenden wäre:
Hier ist ein Arbeitsbeispiel
BEARBEITEN : Es gibt einen Fehler bei der Verwendung der for-Schleife (ich habe dies beim ersten Lesen verpasst, danke an @Evert für den Spot). Bei Verwendung einer For-In-Schleife wird die Variable als Eigenschaftsname der aktuellen Schleife und nicht als tatsächliche Daten festgelegt. Siehe meine aktualisierte Schleife oben für die korrekte Verwendung
WICHTIG : Die
JSON.parse
Methode funktioniert in alten, alten Browsern nicht. Wenn Sie also vorhaben, Ihre Website über eine zeitlich begrenzte Internetverbindung verfügbar zu machen, kann dies ein Problem sein! Wenn Sie jedoch wirklich interessiert sind, finden Sie hier eine Support-Tabelle (die alle meine Kästchen ankreuzt).quelle
Das ist meine Antwort,
quelle
In einer for-in-Schleife enthält die laufende Variable den Eigenschaftsnamen und nicht den Eigenschaftswert.
Da Zähler ein Array sind, müssen Sie eine normale for-Schleife verwenden:
quelle
"Sencha way" für die Interaktion mit Serverdaten ist das Einrichten eines
Ext.data.Store
Proxys, der von einemExt.data.proxy.Proxy
(in diesem FallExt.data.proxy.Ajax
) mit einem ProxyExt.data.reader.Json
(für JSON-codierte Daten sind auch andere Lesegeräte verfügbar) eingerichtet wird. Zum Zurückschreiben von Daten auf den Server gibt esExt.data.writer.Writer
verschiedene Arten.Hier ist ein Beispiel für ein solches Setup:
data1.json
In diesem Beispiel (auch in dieser Geige verfügbar ) sind Ihre Daten wörtlich enthalten.idProperty: 'counter_name'
ist in diesem Fall wahrscheinlich optional, zeigt jedoch normalerweise auf das Primärschlüsselattribut.rootProperty: 'counters'
Gibt an, welche Eigenschaft ein Array von Datenelementen enthält.Mit einem Store-Setup auf diese Weise können Sie Daten vom Server erneut lesen, indem Sie anrufen
store.load()
. Sie können den Store auch mit beliebigen Sencha Touch-geeigneten UI-Komponenten wie Rastern, Listen oder Formularen verbinden.quelle
Etwas mehr auf den Punkt für mich ..
quelle
Das funktioniert wie Charme!
Also habe ich den Code gemäß meinen Anforderungen bearbeitet. Und hier sind die Änderungen: Es wird die ID-Nummer aus der Antwort in der Umgebungsvariablen gespeichert.
quelle
Die Antwort mit der höheren Stimme hat einen Fehler. Wenn ich es benutzt habe, finde ich es in Zeile 3 heraus:
Ich habe es geändert in:
und es hat bei mir funktioniert. Es gibt einen Unterschied zu den anderen Antworten in Zeile 3:
quelle
Nur als Heads-up ...
wurde veraltet .
Das Postman Learning Center schlägt jetzt vor
quelle
Sie sollten einen Datenspeicher und einen Proxy in ExtJs verwenden. Es gibt viele Beispiele dafür, und der JSON-Reader analysiert die JSON-Nachricht automatisch in das von Ihnen angegebene Modell.
Bei der Verwendung von ExtJs muss kein grundlegendes Javascript verwendet werden. Alles ist anders. Sie sollten die ExtJs-Methoden verwenden, um alles richtig zu machen. Lesen Sie die Dokumentation sorgfältig durch, es ist gut.
Diese Beispiele gelten übrigens auch für Sencha Touch (insbesondere v2), das auf denselben Kernfunktionen wie ExtJs basiert.
quelle
Ich bin mir nicht sicher, ob meine Daten genau übereinstimmen, aber ich hatte ein Array von Arrays von JSON-Objekten, die bei Verwendung von Seiten aus jQuery FormBuilder exportiert wurden.
Hoffentlich kann meine Antwort jedem helfen, der auf diese Frage stößt und nach einer Antwort auf ein Problem sucht, das meinem ähnlich ist.
Die Daten sahen ungefähr so aus:
Um dies zu analysieren, habe ich einfach Folgendes getan:
quelle