2010-03-16 6 views
4

En écrivant une application django, je retourne le JSON suivant sur un appel ajax jQuery:Looping par python-dictionnaire-turned-en-JSON en javascript

{ 
    "is_owner": "T", 
    "author": "me", 
    "overall": "the surfing lifestyle", 
    "score": "1", 
    "meanings": { 
     "0": "something", 
     "1": "something else", 
     "3": "yet something else", 
     "23": "something random" 
     }, 
    "user vote": "1" 
} 

Dans le javascript/jQuery fonction de rappel, je peut accéder facilement à l'is_owner, à l'auteur, etc. Mais pour les significations, les chiffres sont différents en fonction de ce qu'il tire du serveur. Du côté du serveur pour la partie significations, maintenant ce que je fais est la construction d'un dictionnaire comme ceci:

meanings_dict = {} 
meanings = requested_tayke.meanings.all() 
for meaning in meanings: 
    meanings_dict[meaning.location] = meaning.text 

puis retourner un JSON je crée comme ceci:

test_json = simplejson.dumps({'is_owner':is_owner, 'overall':overall, 'score':str(score),'user vote':str(user_vote), 'author': author, 'meanings' : meanings_dict }) 
print test_json 

return HttpResponse(test_json) 

Ma question est cela: comment puis-je accéder aux données 'significations' de mon json en javascript? J'ai besoin de boucler tout cela. Peut-être que je dois le charger différemment dans json. J'ai un contrôle total sur le serveur et le client, donc je suis prêt à changer pour le faire fonctionner. A noter également: je n'utilise pas la fonctionnalité serialize de Django. Je ne pouvais pas le faire fonctionner avec ma situation.

Répondre

11

cela fonctionne (grosso modo) comme comment un dict fonctionne en python: vous pouvez itérer sur les clés d'un objet json.

var meanings = json.meanings; 
for (var key in meanings) 
    var value = meanings[key]; 

il pourrait casser si vous utilisez une bibliothèque coquine qui ajoute des éléments prototype de l'objet, de façon à des fins défensives, la bonne pratique établie est d'écrire

for(var key in meanings) 
    if (meanings.hasOwnProperty(key)) 
     var value = meanings[key]; 
+4

Voilà pourquoi j'adore stackoverflow. :) – Phil