web-dev-qa-db-fra.com

Convertir JSON en tableau Javascript

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'}]
9
user962206

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.

10
Darin Dimitrov
initSelection: function (element, callback) {
                    var data = $(element).val();
                    callback($.parseJSON(data));
                }
0
Wilher Distu