10
votes

Utilisation d'une variable comme identifiant dans une matrice JSON

Je me demande s'il est possible d'utiliser des variables assignées comme identifiant dans une matrice JSON. Quand j'ai essayé cela, je reçois des résultats inattendus:

(code est simplifié, les paramètres sont transmis différents) xxx

maintenant la popup alerte dit: " paramètre 'au lieu de "animal". Je sais que je pourrais utiliser une méthode différente (créer un tableau et attribuer chaque paramètre sur une nouvelle ligne), mais je veux garder mon code compact.

ma question est que ma question est possible de: Utilisez une variable comme identifiant dans la matrice JSON, et si oui, pourriez-vous s'il vous plaît dites-moi comment?

Merci d'avance!


0 commentaires

3 Réponses :


10
votes

Vous devrez construire votre objet en deux étapes et utiliser le [] code> Accessoir de propriété:

var parameter = 'animal';
var value = 'pony';

var obj = {};
obj[parameter] = value;

Util.urlAppendParameters (url, obj);


2 commentaires

Oui, je le faisais déjà, mais je veux juste savoir si cela est possible, comme dans d'autres langages de programmation (par exemple, s'échapper avec des backticks, ou juste avec un premier signe de $) désolé pour le titre vague, la terminologie de programmation n'est pas ma meilleure compétence .


@CMS Nous avons recherché Internet pour une solution pendant une longue période et l'a trouvé ici, THX



1
votes

Selon vos besoins, vous pouvez également construire votre objet avec une fonction d'assistance;

Util.createParameters = function(args) {
    var O = {};
    for (var i = 0; i < arguments.length; i += 2)
        O[arguments[i]] = arguments[i + 1];
    return O
}

Util.urlAppendParameters (url, Util.createParameters(parameter, value, "p2", "v2"));


0 commentaires

3
votes

Non, vous ne pouvez pas utiliser une variable comme identifiant dans un objet littéral comme celui-là. L'analyseur s'attend à un nom là-bas pour que vous ne puissiez pas faire beaucoup d'autre mais fournir une chaîne. De même, vous ne pouviez pas faire quelque chose comme ceci: xxx pré>

Le seul travail autour de si vous souhaitez vraiment utiliser un objet littéral sur une seule ligne consiste à utiliser EVAL: P>

Util.urlAppendParameters (url, eval("({" + parameter + " : value})");


1 commentaires

C'est exactement ce que je cherchais. Pas que je vais l'utiliser (je ne veux vraiment pas vraiment vraiment: D), mais j'étais vraiment curieux de savoir comment cela pourrait être résolu. Merci!