Question

J'ai deux objets JSON en Javascript, identiques à l'exception des valeurs numériques. Cela ressemble à ceci:

var data = {
  "eth0":{"Tx":"4136675","Rx":"13232319"},
  "eth1":{"Tx":"4","Rx":"0"},
  "lo":{"Tx":"471290","Rx":"471290"}
}

var old = {
  "eth0":{"Tx":"4136575","Rx":"13232219"},
  "eth1":{"Tx":"4","Rx":"0"},
  "lo":{"Tx":"471290","Rx":"471290"}
}

Un objet appelé "données". a les valeurs actuelles, un autre objet appelé " old " a les mêmes valeurs qu'il y a 1 seconde. J'aimerais générer un objet JSON avec uniquement les modifications afin que je puisse calculer le débit des données sur les interfaces réseau.

var throughput = {
  "eth0":{"Tx":"100","Rx":"100"},
  "eth1":{"Tx":"0","Rx":"0"},
  "lo":{"Tx":"0","Rx":"0"}
}

Je ne suis pas sûr de savoir comment parcourir les données JSON - cela pourrait être pour un nombre quelconque d'interfaces.

Quelqu'un peut-il me donner un coup de main s'il vous plaît? Merci d'avance

Était-ce utile?

La solution

Vous pouvez parcourir les propriétés de l'objet parent et enfant:

var diff = {};
for(var p in data){
  if (old.hasOwnProperty(p) && typeof(data[p]) == 'object'){
    diff[p] = {};
    for(var i in data[p]){
      if (old[p].hasOwnProperty(i)){
        diff[p][i] = data[p][i] - old[p][i];
      }
    }
  }
}

Autres conseils

Le principe de base de l'itération sur des objets en JavaScript est comme suit

var whatever = {}; // object to iterate over
for ( var i in whatever )
{
  if ( whatever.hasOwnProperty( i ) )
  {
     // i is the property/key name
     // whatever[i] is the value at that property
  }
}

Réparer un vérificateur ne serait pas trop difficile. Vous aurez besoin de récursivité. Je vais laisser cela comme un exercice pour vous ou un autre SOer.

Peut-être que c'est déjà assez répondu, mais laissez-moi ajouter ma fiche éhontée :) Un JSON (en fait, tout objet javascript ou structure de tableau) diff & amp; bibliothèque de correctifs que j'ai ouverte provient de github:

https://github.com/benjamine/jsondiffpatch

il génère des diffs (également au format JSON et avec un faible encombrement), que vous pouvez utiliser client (consultez la page de test) & amp; Côté serveur, et s'il est présent, il utilise http://code.google.com / p / google-diff-match-patch / pour les longues chaînes automatiquement.

consultez la page DEMO pour voir comment cela fonctionne.

C’est ce que j’ai fait pour résoudre un problème similaire. Il obtient les différences en seconde comparé au premier.

var first  = originalObj;
var second = modifiedObj;
var diff   = {};

var differ = function(first, second, result) {
    var i = 0;
    for (i in first) {
        if (typeof first[i] == "object" && typeof second[i] == "object") {
            result[i] = differ(first[i], second[i], {});
            if (!result[i]) delete result[i];
        } else if (first[i] != second[i]) {
            result[i] = second[i];
        }
    }
    return isEmpty(result) ? undefined : result;
}

differ(old_conf, new_conf, diff);

Le code est un cas particulier, mais vous avez l’idée générale: P

Vous pouvez utiliser un module de traversée d'objet tel que nervgh / object-traverse faire ceci.

var result = {}
Object.traverse(old, function(node, value, key, path) {
  var resultObject = result
  for(var n=0; n<path.length-1; n++) {
    resultObject = resultObject[path[n]]
  }
  resultObject[key] = value
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top