2012-01-09 1 views
3

J'intervertis une chaîne json dans une variable à l'aide de la fonction parseJSON() de jquery. Le problème est, il transforme mes données en un objet au lieu d'un tableau 2d. Par exemple,Nécessité de convertir les paires clé-valeur json en tableau standard

myData = $.parse(JSON(data)); 
myData.name// = "Bob" 

Le problème est, « nom » est pas censé être une clé (en supposant que le terme est correct). Au lieu de cela, il devrait être:

myData[0] // = "name" 
myData[1] // = "Bob" 

Comment le convertir? Ou existe-t-il une autre méthode que d'utiliser une boucle for pour parcourir l'index d'un tableau (tout en étant capable d'accéder à la fois à la clé et à la valeur sous forme de chaîne, comme dans un tableau 2d).

EDIT: Ceci est un json qui est en cours d'utilisation (notez que c'est BEAUCOUP plus long). C'est ce qui est donné pour « données »

{"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"} 
+1

Pourriez-vous montrer le code où vous remplissez 'data' –

+0

Ajout d'un extrait de JSON, est que ce que vous cherchez? –

+0

Cela semble un peu bizarre à faire, si cela ne vous dérange pas que je dise. Pourquoi créer un tableau à plat avec les clés et leurs valeurs? –

Répondre

5

Une fois que vous avez désérialisée les données (par exemple, vous avez myData, qui est un objet), vous pouvez faire une boucle à travers ses clés à l'aide for..in, puis construire une tableau qui combine les clés et valeurs:

var myData, dataArray, key; 
myData = $.parse(JSON(data)); 
dataArray = []; 
for (key in myData) { 
    dataArray.push(key);   // Push the key on the array 
    dataArray.push(myData[key]); // Push the key's value on the array 
} 

Depuis myData est le résultat de la désérialisation JSON dans data, nous savons que myData est un objet générique (par exemple, à {} par opposition à un new Foo ou quelque chose comme ça) , donc on ne même pas ed hasOwnProperty. Si nous ne savions pas, et nous ne voulions énumérer propres clés et les valeurs de myData, nous ajouterons un hasOwnProperty chèque:

var myData, dataArray, key; 
myData = $.parse(JSON(data)); 
dataArray = []; 
for (key in myData) { 
    if (myData.hasOwnProperty(key)) { 
     dataArray.push(key);   // Push the key on the array 
     dataArray.push(myData[key]); // Push the key's value on the array 
    } 
} 

Il n'y a aucune raison de le faire dans votre cas, à moins que quelqu'un a été en train de batifoler avec Object.prototype (dans ce cas, les prendre derrière le bûcher, leur donner une cachette sévère, et les faire écrire "je ne vais pas tourner avec Object.prototype plusieurs centaines de fois sur le tableau), mais chaque fois que vous utilisez for..in, il est toujours bon d'arrêter et de penser si A) L'objet est garanti être vanille, et B) Si non, voulez-vous seulement ses propres propriétés, ou voulez-vous aussi celles dont il hérite?

+0

Le premier bloc de code a travaillé en or. La façon dont cela fonctionne, je n'ai même pas besoin de les déplacer vers un nouveau tableau. Je peux juste assigner les données dans cette boucle elle-même. Formidable! Merci –

1
var data = $.parse(JSON({"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"})); 

var arr = []; 

for(var i in data) { 
    if(data.hasOwnProperty(i)){ 
    arr.push(i, data[i]); 
    } 
} 

tableau sera:

["feat_3", "4356", "feat_4", "45", "feat_5", "564", "feat_6", "7566"] 
+0

Merci, mais j'ai trouvé que la solution de TJ était une meilleure solution que la conversion en tableaux 2d comme je l'avais initialement prévu. –

+0

Corrigé. Dans la méthode 'push' vous pouvez appliquer plus d'un argument qui remplira un tableau – abuduba

Questions connexes