3 Stimmen

AS3 Basic Parsing JSON

Ich habe ein Problem beim Parsen einer JSON-Datei in AS3. Im versuchen, mehrere JSON-Arrays zu analysieren, aber nicht wirklich wissen, wie man auf die nächste nach dem Zugriff auf die erste zu erhalten. Meine JSON-Datei sieht aus wie:

{
  "term": [{
      "id": 4211,
      "place": "NEW YORK CITY"
    },
    {
      "id": 2675,
      "place": "WASHINGTON (DC)"

    }
  ],
  "term": [{
      "id": 4211,
      "place": "NEW YORK CITY"
    },
    {
      "id": 2675,
      "place": "WASHINGTON (DC)"

    }
  ]

}

Mein AS3-Code sieht wie folgt aus:

public function parseData(e: Event): void {
 var loader: URLLoader = URLLoader(e.target);
 var values: Object = JSON.decode(loader.data);
 var term: Array = values.term;
 var counter: Number = 0;

 for (var key: Object in term) {
  payload[counter] = [term[key].id, term[key].place];
  counter++;
 }

 dispatchEvent(new Event(Event.COMPLETE));
}

Ich kann die Daten aus dem ersten Array erhalten, aber wie würde ich meinen Code so strukturieren, dass ich durch 2 oder mehr "Term"-Arrays iterieren könnte?

Merci

1 Stimmen

Ist es gültig für ein Objekt, zwei Eigenschaften mit genau dem gleichen Namen in Json haben?

6voto

LiraNuna Punkte 61060

JSON (oder jeder andere geordnete Mapping-Typ) kann keine doppelten Schlüssel enthalten.

Die Lösung wäre, das JSON so umzustrukturieren, dass es wie folgt aussieht:

{   
    "terms": [
        [
            {
                "id": 4211,
                "place": "NEW YORK CITY" 
            },
            {
                "id": 2675,
                "place": "WASHINGTON (DC)"

            }
        ],
        [
            {
                "id": 4211,
                "place": "NEW YORK CITY" 
            },
            {
                "id": 2675,
                "place": "WASHINGTON (DC)"

            }
        ]
    ]
}

3voto

Vincent Osinga Punkte 1045

Eine Sache, die mir aufgefallen ist, ist, dass Ihr JSON etwas seltsam ist und Ihren Fehler verursacht. Die Hauptklasse Ihres JSON ist ein Dictionary, das den Begriff zweimal definiert. Dies führt nicht zu einem Fehler, sondern bewirkt, dass der Begriff values.term beim zweiten Mal überschrieben wird. Sie sollten Ihr JSON in etwas wie:

{   
    "term": [[
            {
                "id": 4211,
                "place": "NEW YORK CITY" 
            },
            {
                "id": 2675,
                "place": "WASHINGTON (DC)"

            }],
            [{
                "id": 4211,
                "place": "NEW YORK CITY" 
            },
            {
                "id": 2675,
                "place": "WASHINGTON (DC)"

            }]
       ]

}

und Ihren Code an:

public function parseData(e:Event):void
  {
   var loader:URLLoader = URLLoader(e.target);
   var values:Object = JSON.decode(loader.data);
   var term:Array = values.term;
   var counter:Number = 0;

   for (var keys:Object in term)
   {
     for (var key:Object in term[keys])
     {
        payload[counter] = [term[keys][key].id, term[keys][key].place];
        counter++;
     }
   }

   dispatchEvent(new Event(Event.COMPLETE));
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X