web-dev-qa-db-fra.com

Ajouter un nouvel attribut de manière dynamique au tableau JSON existant dans le nœud

J'ai besoin d'ajouter un attribut qui n'existe pas dans le JSON actuel. L'objet json ressemble à ci-dessous.

var jsonObj = {
        "result" : "OK",
        "data" : []
    };

Et je veux ajouter de la température à l'intérieur des «données». Je pourrais le faire comme ci-dessous.

jsonObj.data.Push( {temperature : {}} );

Et puis, je veux ajouter "maison", "travail" à l'intérieur "température". Le résultat serait comme ci-dessous.

{
    "result" : "OK",
    "data" : [
        { "temperature" : {
            "home" : 24,
            "work" : 20 } }
    ]
};

Comment pourrais-je faire ça? J'ai réussi à insérer "température" dans "données", mais je n'ai pas pu ajouter "maison" et "travail" dans la température. Il pourrait y avoir plus à l'intérieur de la 'température' donc il doit être entouré de {}. 

4
Mingoo

Que dis-tu de ça?

var temperature = { temperature: { home: 24, work: 20 }};

jsonObj.data.Push(temperature);

Je ne peux pas dire si le fait de structurer votre question est important en deux étapes, mais vous pourriez ajouter les propriétés home et work plus tard en indexant dans le tableau, comme ceci:

jsonObj.data.Push({ temperature: { }});

jsonObj.data[0].temperature.home = 24;
jsonObj.data[0].temperature.work = 20;

Mais ce n'est pas une bonne idée car cela dépend de l'index du tableau pour trouver l'objet temperature. Si cela est nécessaire, il serait préférable de faire quelque chose comme une boucle dans le tableau data pour trouver l'objet qui vous intéresse de manière concluante.

Modifier:

Un exemple de boucle permettant de localiser l’objet température se présente comme suit:

for (var i = 0; i < jsonObj.data.length; i++) { 
  if (jsonObj.data[i].temperature) { 
    break;
  }
}

jsonObj.data[i].temperature.home = 24;
jsonObj.data[i].temperature.work = 20;

Modifier:

Si la propriété qui vous intéresse est inconnue au moment du développement, vous pouvez utiliser la syntaxe du crochet pour faire varier les éléments suivants:

for (var i = 0; i < jsonObj.data.length; i++) { 
  if (jsonObj.data[i]['temperature']) { 
    break;
  }
}

jsonObj.data[i]['temperature'].home = 24;
jsonObj.data[i]['temperature'].work = 20;    

Ce qui signifie que vous pourriez utiliser une variable ici au lieu de la coder en dur:

var target = 'temperature';

for (var i = 0; i < jsonObj.data.length; i++) { 
  if (jsonObj.data[i][target]) { 
    break;
  }
}

jsonObj.data[i][target].home = 24;
jsonObj.data[i][target].work = 20;
13
Dave Ward

Que diriez-vous

jsonObj.data.Push( {
  temperature : {
        "home" : 24,
        "work" : 20
  } 
} );
0
Pointy