2013-08-22 8 views
13

Czy tablica JSON może zawierać obiekty o różnych parach klucz/wartość. Od this tutorial, przykład podano dla JSON tablicy składa się z obiektów o tej samej pary klucz/wartość:Czy tablica JSON może zawierać obiekty o różnych parach klucz/wartość?

{ 
"example": [ 
{ "firstName":"John" , "lastName":"Doe" }, 
{ "firstName":"Anna" , "lastName":"Smith" }, 
{ "firstName":"Peter" , "lastName":"Jones" } 
] 
} 

Jeśli chcę zmienić go mieć różne pary klucz/wartość wewnątrz tablicy JSON, jest następujący nadal prawidłowy JSON?

{ 
"example": [ 
{ "firstName":"John", "lastName":"Doe" }, 
{ "fruit":"apple" }, 
{ "length":100, "width":60, "height":30 } 
] 
} 

Chcę to potwierdzić. Jeśli tak, jak mogę użyć JavaScriptu, aby sprawdzić, czy pole JSON "example" zawiera pierwsze jednorodne obiekty lub drugie heterogeniczne obiekty?

+3

Tak, tablice json może zawierać dowolny prawidłowy ciąg json: obiekty o różnych par klucz/wartość, inne macierze, liczby, ciągi znaków, wartości logiczne w tej samej tablicy. – arnaud576875

+0

przejdź tutaj, aby przetestować dowolny javascript, który chcesz: http://jsconsole.com/ – dmoss18

+0

Nie tylko jest dość stary, praktyka, którą obsługuje była błędna już 13 lat przed opublikowaniem artykułu. –

Odpowiedz

11

Możesz użyć dowolnej struktury, którą lubisz. JSON nie jest oparty na schemacie w sposobie, w jaki często używa się XML, a JavaScript nie jest statycznie wpisywany.

można konwertować JSON do obiektu JS używając JSON.parse a potem po prostu przetestować istnienie własności

var obj = JSON.parse(jsonString); 
if(typeof obj.example[0].firstName != "undefined") { 
    //do something 
} 
+0

Dzięki. Jaki jest najlepszy sposób na sprawdzenie, czy tablica JSON zawiera jednorodne obiekty, czy nie? – tonga

+1

@tonga nie będzie można przetestować jednorodności tablicy w ten sposób. Możesz wiedzieć tylko, czy tablica jest jednorodna, dopóki nie skończysz przetwarzania wszystkich jej elementów. –

+0

Odpowiedź jest poprawna, ale oświadczenie o XML jest nieprawidłowe ... XML jest oparty na dobrze znanej specyfikacji i bardzo jasnej definicji, ale jej jeśli chcesz użyć schematu, czy nie, jest to opcja. –

5

Nie ma znaczenia, że ​​możesz mieszać i dopasowywać tyle, ile chcesz.

Można tylko przetestować to

typeof someItem.example !== 'undefined' // True if `example` is defined. 
+0

Dzięki. Czy to podejście może sprawdzić, czy tablica zawiera jednorodne obiekty, czy nie? Jaki jest najlepszy sposób na przetestowanie jednorodności tablicy JSON przy użyciu JavaScript? – tonga

+1

@tonga to byłoby iterowanie go. –

+0

Więc nie ma jednej wbudowanej funkcji JS do testowania tablicy? – tonga

1

To doskonale ważne JSON. Osobiście wolę tę składnię lepiej, ponieważ łatwiej czyta:

{ 
    "example": [ 
     { 
      "firstName": "John", 
      "lastName": "Doe" 
     }, 
     { 
      "fruit": "apple" 
     }, 
     { 
      "length": 100, 
      "width": 60, 
      "height": 30 
     } 
    ] 
} 

Jak odpowiedzieć na pytanie drugie, można odczytać dane z ciągiem JSON za pomocą var data = JSON.parse(datastring);. Następnie po prostu użyj go, dzwoniąc pod numer data.property.secondlevel. Każda zmienna może być obiektem, tablicą, łańcuchem lub liczbą, umożliwiając zagnieżdżanie struktur.

+0

Jeśli się zgodzisz, pozwól mi przynajmniej znać _why_. Czytałem to pytanie i nie widzę sensu tego. – Broxzier

+0

Może zasugerować zmianę pierwotnego pytania do ponownego formatowania? Ale nie moje zdanie ... – hurrymaplelad

1

jesteś wolny, aby robić to, co chcesz z zawartością tablicy. Nie zapomnij o tym, zanim spróbujesz powtórzyć właściwości dostępu każdego elementu w swojej tablicy.

Jedna rzecz: nie będziesz w stanie przekształcić tego na coś innego niż tablica obiektów po stronie serwera, więc nie ma później niespodzianek.

jako podpowiedź, być może można dołączyć wspólne pole do obiektów określających "typ", aby później można je było łatwo przetworzyć.

var array = [{"type":"fruit", "color":"red"}, 
{"type":"dog", "name":"Harry"}]; 

var parser = { 
    fruit:function(f){ 
    console.log("fruit:" + f.color); 
    }, 
    dog: function(d){ 
    console.log("dog:"+d.name); 
    }}; 

for(var i=0;i<array.length;i++){ 
    parser[array[i].type](array[i]); 
} 
Powiązane problemy