web-dev-qa-db-fra.com

création d'un objet json avec des variables

J'essaie de créer un objet json à partir de variables que j'obtiens dans un formulaire.

var firstName = $('#firstName').val();
var lastName  = $('#lastName').val();
var phone     = $('#phoneNumber').val();
var address   = $('#address').val();

Jusqu'à présent, j'ai le code ci-dessous, mais il ne sera pas validé ou ne fonctionnera pas. Je suis nouveau dans ce domaine, aidez-moi! Changer var en ceci:

var jsonObject = 
                {
                 firstName: firstName, 
                 lastName: lastName,
                 phoneNumber:phoneNumber,
                 address:address
                }

dans JSONlint je reçois cette erreur:

Erreur d'analyse sur la ligne 1: varjsonObject = {
^ Attendant '{', '['

20
Anthony

si vous avez besoin de JSON entre guillemets, utilisez JSON.stringify( object)

var $items = $('#firstName, #lastName,#phoneNumber,#address ')
var obj = {}
$items.each(function() {
    obj[this.id] = $(this).val();
})

var json= JSON.stringify( obj);

DÉMO: http://jsfiddle.net/vANKa/1

21
charlietfl

Il est appelé Object Literal

Je ne sais pas ce que vous voulez que votre structure soit, mais selon ce que vous avez ci-dessus, où vous mettez les valeurs dans les variables, essayez ceci.

var formObject =  {"formObject": [
                {"firstName": firstName, "lastName": lastName},
                {"phoneNumber": phone},
                {"address": address},
                ]}

Bien que cela semble plus logique (pourquoi avez-vous un tableau dans le littéral ci-dessus?):

var formObject = {
   firstName: firstName
   ...
}
11
hvgotcodes

Essayez ceci pour voir comment créer un objet à partir de chaînes.

var firstName = "xx";
var lastName  = "xy";
var phone     = "xz";
var adress    = "x1";
var obj = {"firstName":firstName, "lastName":lastName, "phone":phone, "address":adress};
console.log(obj);
6
uzername_not_found

Vous faites référence à un élément DOM lorsque vous faites quelque chose comme $('#lastName'). C'est un élément avec l'attribut id "lastName". Pourquoi faire ça? Vous souhaitez référencer la valeur stockée dans une variable locale, complètement indépendante. Essayez ceci (en supposant que l'affectation à formObject est dans la même portée que les déclarations de variables) -

var formObject = {
    formObject: [
        {
            firstName:firstName,  // no need to quote variable names
            lastName:lastName
        },
        {
            phoneNumber:phoneNumber,
            address:address
        }
    ]
};

Cela semble très étrange cependant: vous créez un objet "formObject" qui contient un membre appelé "formObject" qui contient un tableau d'objets.

4
Madbreaks
var formValues = {
    firstName: $('#firstName').val(),
    lastName: $('#lastName').val(),
    phone: $('#phoneNumber').val(),
    address: $('#address').val()
};

Notez que cela contiendra les valeurs des éléments au moment où le littéral de l'objet a été interprété, pas lorsque les propriétés de l'objet sont accessibles. Vous auriez besoin d'écrire un getter pour cela.

2
jbabey