2010-05-28 4 views
2

J'ai un JSON chaîne dans ce format:Comment récupérer la clé et la valeur de JSON chaîne

{ 
    "supplier": { 
    "mov_10": "love actually", 
    "mov_1": "fare" 
    }, 
    "quantity": 20, 
    "success": true, 
    "length":2 
} 

Maintenant, je veux créer une zone de sélection ci-dessous en utilisant l'objet supplier (utilisant à la fois les clés et valeurs), comme ceci:

<select id="selectme"> 
    <option id="mov_10">love actually</option> 
    <option id="mov_1">fare</option> 
</select> 

Alors, comment puis-je le créer? Je veux juste savoir comment atteindre mov_10 et mov_1 dans l'objet. Désolé pour mon mauvais anglais, mais aidez-moi s'il vous plaît.

Merci.

+2

Je nettoyais votre question un peu, mais n'a pas changé votre référence à un « objet JSON. » C'est en fait incorrect. Il n'y a pas d'objet JSON. Ce que vous avez est juste un objet JavaScript normal dans la notation littérale d'objet. Vous le confondez avec "chaîne JSON", qui est une chaîne spécifiquement formatée dans un sous-ensemble de notation littérale d'objet. –

+0

Je peux être incorrect pour nommer mais j'ai montré le tableau que je reçois. – diEcho

Répondre

0

Si je comprends bien la question, je pense que vous pouvez utiliser quelque chose le long de cette:

var jsonArray = ... ; // {"supplier": ... } (JS Object) 
var supplierOptions = jsonArray.supplier; 

// TODO: remember to set up selectme! 

for(var optionId in supplierOptions) { 
    if(!supplierOptions.hasOwnProperty(optionId)) { 
     continue; 
    } 

    var optionValue = supplierOptions[optionId]; 

    // operate with name and value here (append to select ie.) 
    $("#selectme").append('<option id="' + optionId + '">' + optionValue + '</option>'); 
} 

Le code pourrait probablement utiliser un peu de nettoyage. Espérons que cela transmet l'idée de base, cependant.

+1

Vous devez utiliser 'if (! Supplier.hasOwnProperty (optionId)) continue' pour vous assurer que vous ne travaillez pas avec les propriétés énumérables sur le prototype d'objet. ['hasOwnProperty'] (https://developer.mozilla.org/fr/Core_JavaScript_1.5_Reference:Global_Objects:Object:hasOwnProperty) –

+0

Bon point! Je vais changer ça. –

+0

quoi 'si (! Supplier.hasOwnProperty (optionId))' cela faire excatly ?, s'il vous plaît effacer – diEcho

2

Utilisez l'instruction for...in itérer sur les touches:

for (var k in someObject.supplier) { 
    someOption.value = k; 
    someOption.text = someObject.supplier[ k ]; 
} 
+2

Doug Crockford sur for..in: "Sachez que les membres qui sont ajoutés au prototype de l'objet seront inclus dans l'énumération Il est sage de programmer défensivement en utilisant la méthode hasOwnProperty pour distinguer les vrais membres de l'objet. " http://javascript.crockford.com/code.html – nickf

Questions connexes