2012-04-11 4 views
0

J'ai un fichier JSON qui a été converti à partir d'un fichier csv et est trop gros pour être modifié manuellement. Sa syntaxe est un large éventail je pense. Les données proviennent d'un groupe de routeurs et je vise à construire des objets de routeur. La façon dont le fichier CSV en JSON actuel est organisé par chaque ligne et je veux choisir chaque routeur et avoir un objet avec le nom du routeur, toutes les mesures de bande passante associées à ce routeur.mappage JSON à un objet

Comment aborderiez-vous cela? Je tente de prendre soin de tout cela lorsque je parcoure le fichier JSON et lorsque le routeur change, je démarre une nouvelle instance de l'objet routeur. Je ne suis plus un newb, juste un apprenti lent. Donc l'étape suivante serait de créer une classe de routeur avec js et peupler la classe avec ce que je tire de mon tableau JSON géant, ou pourrait/devrais-je faire avec la classe manuscrite et créer tous les objets à la volée? (Puis-je créer des objets à la volée

JSON actuel (il va sur des pages, chaque routeur ayant quelques centaines d'entrées dans le csv:.

[ 
    { 
     "Router": "RouterID1", 
     "TimeStamp": "2012/01/01 06:00:00", 
     "transferBytes": "23235", 
     "ReceivedBytes": "29903" 
    }, 
    { 
     "Router": "RouterID1", 
     "TimeStamp": "2012/01/01 06:05:00", 
     "transferBytes": "21235", 
     "ReceivedBytes": "22103" 
    } 
    { 
     "Router": "RouterID2", 
     "TimeStamp": "2012/01/01 06:00:00", 
     "transferBytes": "23235", 
     "ReceivedBytes": "29903" 
    }, 
    { 
     "Router": "RouterID2", 
     "TimeStamp": "2012/01/01 06:05:00", 
     "transferBytes": "21235", 
     "ReceivedBytes": "22103" 
    } 
] 

@amnotiam: les types de routeur sont gauranteed être adjecent les uns aux autres

Cela pourrait ne pas être valide, mais voici la structure que je pense que je vais pour:

[ 
    { 
     "Router": "RouterID1" 
     "TimeStamp": array of timestamps 
     "transferBytes": array of bytes transferred for each timestamp 
     "ReceivedBytes": array of bytes received for each timestamp 
    }, 
    { 
     "Router": "RouterID2", 
     "TimeStamp": array of timestamps 
     "transferBytes": array of bytes transferred for each timestamp 
     "ReceivedBytes": array of bytes received for each timestamp 
    } 
] 

@Bergi Je veux faire un objet pour chaque routeur avec e ere des données historiques contenues avec dans l'objet. Droit sais que j'ai un objet pour chaque entrée de temps. (Je pense)

@Rick Bon appel, je serai et probablement poser cette question plus tard :)

+0

-ce que les routeurs organisés de telle sorte que les mêmes types de routeur sont garantis pour être adjacents les uns aux autres? Et pouvez-vous donner une illustration de ce à quoi devrait ressembler la structure de données résultante? –

+2

Vous avez déjà beaucoup d'objets pour les routeurs dans votre tableau (parsed json). A quoi veux-tu les transformer? – Bergi

+0

Allez-vous analyser/créer des objets chaque fois que la page se charge ou se rafraîchit? La création de tous ces éléments et la mise en cache de ceux-ci seraient probablement meilleures, de sorte que vous n'avez pas à analyser les données x nombre de fois où le routeur est modifié. – Rick

Répondre

1

Vous pouvez vraiment juste créer les objets à la volée. Il ne sera pas plus rapide de coder en dur un ensemble d'objets de routeur, et il est probable que vous fassiez des erreurs par écriture.

Jetez un oeil à ceci: http://jsfiddle.net/aSbm6/

+0

Exactement ce que je veux faire. Je suis juste incertain comment avoir ma structure mon objet à la volée avec une structure JSON je ne veux pas. – rd42

+0

@ rd42 voulez-vous une recherche rapide par nom de routeur? Par exemple, vous rechercheriez un horodatage spécifique comme 'routeurs ["DWG-350"]. Utilisation [1] .timestamp' – climbage

+0

exaclty. Je souhaite afficher les données historiques d'une feuille de calcul générée par chaque routeur. – rd42

1

Je voudrais commencer par tourner la JSON dans une variable php, de sorte que vous pouvez utiliser sur plus facilement. Il semble que votre JSON est un grand tableau d'objets, il ressemblerait à ceci:

$routerArray = json_decode($yourJsonString); 

Ensuite, vous pouvez itérer et obtenir vos données:

$newRouterObjectsArray = array(); 

foreach($routerArray as $routerObject) { 
    if (empty($newRouterObjectsArray[$Router])) { 
     // instantiate new router here: 
     $newRouterObjectsArray[$Router] = new Router([params]); 
    } 
    // any other logic, assuming that the router does exist 
} 

Si vous faites cela directement javascript, il ressemblerait à ceci:

var routerArray = JSON.parse([yourJsonString]); 
var newRouterObjects = {}; 

for (routerEntry in routerArray) { 
    if ('undefined' == typeof newRouterObjects[routerEntry->Router]) { 
     //if this router doesn't exist yet, create it 
     newRouterObjects[routerEntry->Router] = new Router([params]); 
    } 
    // update totals, etc. 
} 
+0

Je ne pense pas que ce projet est en PHP? – quodlibetor

+0

Bon point - je pensais que j'avais l'étiquette php, mais je n'ai pas =/ –

+0

C'est bon, ça peut quand même aider. – rd42

1

JSON.parse --ou équivalent de votre bibliothèque - si on leur donne votre fichier JSON, retourne un tableau d'objets, de sorte que vous n'avez pas besoin de créer des objets.

Si nous appelons data la chaîne JSON dans votre exemple alors:

var routers = JSON.parse(data); 
routers[0].Router === "DWG-350"; // true 
routers[1].TimeStamp === "2012/01/01 06:05:00"; // true 

routers[0].Router === routers[1].Router; // true 
routers[0].TimeStamp === routers[1].TimeStamp; // false 

Si vous devez faire un filtrage logique ou alors vous pouvez utiliser tous les objets routers comme des objets Javascript, parce qu'ils sont.

On ne sait pas exactement ce que vous essayez de faire, cependant.

Je pense que ceci est la logique que vous voulez:

var routers = JSON.parse(data), // or jQuery.parseJSON() 
    aggregate = {}; 


for (var i = 0, max = routers.length; 
    i < max; 
    i++) { 

    var router = routers[i]; 
    if (typeof aggregate[routers[i].Router] === 'undefined') { 
     aggregate[router['Router']] = {"TimeStamp": [], 
             "ReceivedBytes": []} 
             "TransferredBytes": []}; 

    } 

    aggregate[router['Router']]["TimeStamp"] 
     .push(router['TimeStamp']); 
    aggregate[router['Router']]["ReceivedBytes"] 
     .push(router['ReceivedBytes']); 
    aggregate[router['Router']]["TransferredBytes"] 
     .push(router['TransferredBytes']); 
} 
+0

@quodliberator Je ne sais pas trop comment le demander :) Je pense pour résumer. Je veux reconstituer mes objets à partir de la structure JSON dans laquelle je lis. Votre réponse semble prometteuse. – rd42

+0

quel type de structure voulez-vous qu'ils aient? En d'autres termes: quelles sont les propriétés des routeurs qui vous intéressent? – quodlibetor

Questions connexes