2010-11-20 28 views
0

Ich bin auf der Suche nach der Struktur eines JSON-Objekts ohne das vordefinierte Wissen, was es enthalten kann. Auszuarbeiten, kann ichJSON mit unbekannter Struktur dekodieren

[{"x":0,"y":0.4991088274400681,"z":7.489443555361306}, {"x":0,"y":0.7991088274400681,"z":7.489343555361306},{"x":0,"y":0.5991088274400681,"z":7.482445555361306}] 

oder sogar etwas gegeben wird verrückt wie:

'AL': {name:'Alabama', landarea:131426, waterarea:4338, population:[3525342,4243844]}, 
'AK': {name:'Alaska', landarea:1418400, waterarea:234324, population:[43230943,43230943]} 

Mit anderen Worten, ich habe keine Ahnung, welche Art von JSON Ich werde bekommen, aber ich würde möchte wissen, dass es x, y und z in der ersten mit einem assoziierten Wert oder AL, AK und Namen, Landbereich, Wasserbereich und einer Reihe von Populationen in der zweiten gibt.

Dies ist eine Art wie die Spaltenüberschriften in Excel erhalten. Ich weiß, dass es eine sich wiederholende Struktur geben wird.

Ist die einzige Möglichkeit, dies zu analysieren, indem Sie JSON_decode verwenden und dann typeOf Prüfungen, um zu sehen, ob was ich habe, ist ein Object/Array/String? Es wirkt ziemlich klobig.

+3

Ich würde für neue API fragen, es sollte nicht zwei verschiedene Sätze von Daten auf eine Anfrage zurückgeben – mpapis

+0

Es ist nicht, dass die API verschiedene Sätze von Daten zurückgibt, es ist nur, dass ich Benutzer-gespeist JSON Pars analysieren kann in verschiedenen Formaten sein. Ein bisschen gefährlich, ich weiß. – Rio

Antwort

3

Die native JSON-Decodierfunktion eines Browsers kann mit jedem wohlgeformten JSON umgehen. Was Sie wollen, ist eine Funktion, die das decodierte JSON verstehen kann. Das ist nicht möglich, zumindest nicht, wenn Sie absolut keine Vorkenntnisse oder einen Umgang mit den Daten haben. Wenn Sie jedoch nur den Datentyp für jede Komponente kennen möchten, funktioniert typeof einwandfrei.

+0

einverstanden - json_decode sagt Ihnen bereits, dass die Eigenschaft x ein Array von y-Elementen hat, zum Beispiel .. es ist implizit. Scheint, dass das OP versucht, zusätzliche semantische Bedeutung zu sammeln, und es gibt keine Möglichkeit, dies ohne ein gewisses Vorwissen zu tun. – Hamish

+1

Vielen Dank. Zumindest kann ich fortfahren, ohne mir zu viele Sorgen zu machen, dass ich versuche, das Rad neu zu erfinden. – Rio