2010-12-18 10 views
6

Zasadniczo mam następujące JSON pochodzi obiektu:Jak zbudować tablicę JavaScript kluczowych wartości tworzą obiekt JSON

({ 
    "id" : 3, 
    "clientName" : "Avia", 
    "monthlyactiveusers" : 2083, 
    "dailynewlikes" : 0, 
    "totallikes" : 4258, 
    "usersgraph" : { 
     "sTotalLikes" : [{ 
      "likes" : 79, 
      "date" : "1/1/2010" 
     }, 
     { 
      "likes" : 116, 
      "date" : "1/1/2010" 
     }], 
     "sDailyActiveUsers" : [{ 
      "likes" : 79, 
      "date" : "1/1/2010" 
     }, 
     { 
      "likes" : 116, 
      "date" : "1/1/2010" 
     }] 
    } 
}); 

I muszę następujący wynik:

sTotalLikes = [['1/1/2010', 79],['1/1/2010', 79],['1/11/2010', 79]]; 
sDailyActiveUsers = [['1/1/2010', 10],['1/5/2010', 300],['1/11/2010', 220]]; 

znam cię może iterować przez obiekt, aby zbudować tablicę za pomocą następującego kodu, ale nie mogłem wymyślić, jak zbudować samą tablicę JavaScript. Z góry dziękuję za pomoc.

var sTotalLikes = new Array(); 

for (var i = 0; i < usersgraph.sTotalLikes.length; i++) { 
    //how do I build the arry ? 
    sTotalLikes[i] 
    } 
+0

Zastanawiam się, czy istnieje jakieś dziwne narzędzie pivot dla struktur danych JavaScript. To byłoby przydatne. –

+3

... jest to obiekt literalny, a nie obiekt JSON (chociaż mógł * być * obiektem JSON, gdy był w ciągu znaków). Na szczęście dodałem teraz do tego adresu URL: http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ –

+0

@Felix: yes, +1 - obiekt JS z cytowanymi klawiszami "Obiekt JSON" nie tworzy. –

Odpowiedz

2

Musisz iteracji przez każdego elementu w sTotalLikes i sDailyActiveUsers.

Możesz również see the live demo here kompletny i działający program z komentarzami. :)

// declare arrays for storing total likes and active users 
var totalLikes = []; 
var activeUsers = []; 



// first iterate for total likes 
for (var i = 0; i < data.usersgraph.sTotalLikes.length; i ++) 
{ 
    var like = data.usersgraph.sTotalLikes[i]; 

    // create a new array of date and likes 
    // and push into total likes 
    totalLikes.push([like.date, like.likes]); 
} 



// then iterate for active users 
for (var i = 0; i < data.usersgraph.sDailyActiveUsers.length; i ++) 
{ 
    var user = data.usersgraph.sDailyActiveUsers[i]; 

    // create a new array of date and likes 
    // and push into active users 
    activeUsers.push([user.date, user.likes]); 
} 

mam nadzieję, że to pomoże!

+0

+1 za dobry szczegół – Singleton

+0

Wow !! jsfiddle.net jest niesamowity. Dzięki za wskazanie tego. To jest dokładnie to, czego potrzebowałem do przetestowania mojego personelu. Używam jqplota i początkowo próbowałem go podać ciągiem Jsona określonym powyżej, ale z jakiegoś powodu go nie lubię, więc po prostu zbuduję tablicę JavaScript z to. Jeszcze raz dziękuję za pomoc. –

+0

Zawsze mile widziane :) –

2

Spróbuj .. można łatwo rozszerzyć go na sDailyActiveUsers

var sTotalLikes = new Array(); 
    var lsTotalLikes = usersgraph.sTotalLikes; 
for (var i = 0; i < lsTotalLikes.length; i++) 
{ 

    var obj = lsTotalLikes[i]; 
     var lArr = [] 
     lArr.push(obj.date); 
     lArr.push(obj.likes); 
     sTotalLikes.push(lArr) 
    } 
+1

Preferuj 'var sTotalLikes = [];' do tego, który masz w kodzie. – SuperSaiyan

+1

:) Nie chciałem zmieniać początkowego kodu, który miał OP, możesz spojrzeć na definicję lArr, użyłem [], bo jestem leniwy, aby pisać :) – Chandu

1

Wygląda mi na to, po prostu zajrzeć do wartości obiektów.

var usersgraph = { ... }; // pulled from the data in your question 
var result = {}; 
for (users_key in usersgraph) { 
    var vals = []; 
    var data = usersgraph[users_key] 
    for (k in data) { 
     vals.push(values(data[k])); 
     // or if you need to order them differently.. 
     //vals.push([ data[k]['date'], data[k]['likes'] ]); 
    } 
    result[users_key] = vals; 
} 

Oh, jeśli nie już domyślić można użyć [], aby utworzyć tablicę i {}, aby utworzyć obiekt/asocjacyjnej.

0

tak (odnosząc się do kodu):

/* inside your for loop */ 
sTotalLikes.push([ 
    usersgraph.sTotalLikes[i].date, 
    usersgraph.sTotalLikes[i].likes 
]) 
Powiązane problemy