Je reçois actuellement un objet JSON Du côté serveur de mon application, le résultat est le suivant:
{"tags":"[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]"}
Mais alors je n'ai pas vraiment besoin des "tags" et des guillemets dans le résultat.
Donc, ce que je veux, c'est une représentation sous forme de tableau de cet objet JSON
donc comment pourrais-je convertir cette
{"tags":"[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]"}
pour ça
[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]
Voici la boucle qui crée le tableau
String k = "[";
List<Tag> tg = audioTaggingService.findTagsByName(q);
for(int i = 0; i<audioTaggingService.findTagsByName(q).size();i++){
Tag t = tg.get(i);
if(i == (tg.size() - 1)){
k+="{value: "+t.getId()+",label:'"+t.getName()+"'}";
}else{
k+="{value: "+t.getId()+",label:'"+t.getName()+"'}";
}
}
k+="]";
Le résultat du code ci-dessus est ceci
[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]
En supposant que vous obteniez votre réponse côté serveur dans un objet javascript appelé response
, vous pouvez analyser la propriété chaîne tags
à l'aide de la fonction $.parseJSON
. Mais vous devez d’abord réparer le code côté serveur afin qu’il retourne une chaîne JSON valide pour la propriété tags (les noms de propriété JSON doivent être entre guillemets):
// This came from the server
var response = {"tags":"[{\"value\": 2,\"label\": \"Dubstep\"},{\"value\": 3,\"label\": \"BoysIIMen\"},{\"value\": 4,\"label\":\"Sylenth1\"}]"};
// Now you could parse the tags string property into a corresponding
// javascript array:
var tags = $.parseJSON(response.tags);
// and at this stage the tags object will contain the desired array
// and you could access individual elements from it:
alert(tags[0].label);
Si, pour une raison quelconque, vous ne pouvez pas modifier votre script côté serveur pour fournir un code JSON valide dans la propriété tags
, vous pouvez toujours utiliser eval
au lieu de $.parseJSON
:
var tags = eval(response.tags);
Ce n'est pas une approche recommandée, vous devriez normalement éviter d'utiliser eval
car cela exécuterait du javascript arbitraire.
initSelection: function (element, callback) {
var data = $(element).val();
callback($.parseJSON(data));
}