2012-12-11 15 views
5

Mam JSON, który wygląda mniej więcej tak:javascript konwertować lub owinąć obiektu do tablicy do kompleksowego JSON

var countries = [ 
{ 
    name: 'united states', 
    program: { 
       name: 'usprogram' 
      } 
}, 
{ 
    name: 'mexico', 
    program: { 
       name: 'mexico program' 
      } 
}, 
{ 
    name: 'panama', 
    program: [ 
      { 
       name: 'panama program1' 
      }, 
      { 
       name: 'panama program2' 
      } 
      ] 
}, 
{ 
    name: 'canada' 
} 
]; 

Czy istnieje sposób, aby zawsze owinąć obiekt countries.programs do tablicy tak, że końcowy wynik wygląda mniej lubię to? Próbowałem niektóre funkcje narzędzia w podkreśleniu JS, ale rozwiązanie mnie umyka.

var countries = [ 
{ 
    name: 'united states', 
    program: [ //need to wrap this object into an array 
      { 
       name: 'usprogram' 
      } 
      ] 
}, 
{ 
    name: 'mexico', 
    program: [ //need to wrap this object into an array 
      { 
       name: 'mexico program' 
      } 
      ] 
}, 
{ 
    name: 'panama', 
    program: [ 
      { 
       name: 'panama program1' 
      }, 
      { 
       name: 'panama program2' 
      } 
      ] 
}, 
{ 
    name: 'canada' 
} 
]; 

Dzięki!

+0

Jak robisz swoje JSON? Czy chcesz przekonwertować element na tablicę tylko wtedy, gdy uzyskujesz do niego dostęp? – Sampson

+3

To nie jest JSON, czyli obiekty i tablice JavaScript. JSON to format tekstowy reprezentujący obiekty i tablice. – Guffa

Odpowiedz

18

Nie automatyczna, nie. Pętla przez kraje, a następnie country.program = [].concat(country.program). Ten ostatni element magii zawinie wartość, jeśli nie jest tablicą, i pozostawi ją tak, jak jest. Przeważnie. (Będzie to inna, ale równoważna tablica).

EDIT na życzenie:

_.each(countries, function(country) { 
    country.program = [].concat(country.program); 
}); 
+0

Nie jestem pewien co masz na myśli. jak to zadziała? – Kevin

+0

@Kevin: Proszę bardzo, – Amadan

+2

To jest genialne! Dzięki za wyjaśnienie – Kevin

1

Coś takiego może działać

_.each(countries, function(country) { 
      ! _.isArray(country.program) && (country.program = [country.program]); 
        }); 
+0

Ten działał dla mnie, ale JSLint zgłasza ten błąd: Błąd: Problem przy linii 24 znak 79: Oczekiwano przypisania lub wywołania funkcji i zamiast tego zobaczyłem wyrażenie. ! _.isArray (country.program) && (country.program = [country.program ... – Kevin

+0

@Kevin: Jest to skarga w stylu, program powinien nadal działać – Amadan

Powiązane problemy