2013-05-06 5 views
1

J'ai un objet json dynamique qui peut contenir différents types d'attributs et d'objets à l'intérieur, pourrait avoir des chaînes de plan ou même des tableaux. J'ai fait un code javascript pour convertir une seule structure JSON en une table HTML, fonctionnait bien mais je voulais l'utiliser pour un JSON dynamique, donc je devrais fondamentalement parcourir l'arbre JSON parents et enfants pour voir comment créer ce tableau HTML.html table basé sur l'arbre d'objet json

Mais j'ai quelques problèmes en essayant de valider si un enfant a un objet à l'intérieur, comme ceci: (je ne veux pas ajouter de nombreux détails à l'JSON)

parent: { 
    child_1: { 
     attr1 : value1 
    }, 
    child_2: { 
      [{ attribues and values in an array }] 
    } 
} 

Comment pourrais-je atteindre cet? Je pensais à l'aide de la fonction « typeof » comme ceci:

if (typeof key === 'array') { 
    // do something 
}else{ 
    // do another stuff 
} 

Mais je ne crois pas que cela fonctionnerait bien, pouvez-vous les gars me aider?

Merci d'avance.

+0

Je pense que cela devrait fonctionner OK. Utilisez une fonction récursive pour construire la table. – Barmar

+0

@Barmar pouvez-vous m'aider en me donnant un exemple s'il vous plaît? Je pensais à cela aussi, puisque chaque tableau que je trouve, je vais créer une ligne "linkable" pour ajouter une autre pop-up pour toutes ces données :( – msqar

+0

Essayez de l'écrire vous-même, alors quelqu'un vous aidera à le résoudre. – Barmar

Répondre

2

La vérification typeof key === 'array' est incorrecte car pour les tableaux typeof retournera "object". Vous pouvez essayer d'utiliser à la place instanceof:

if (key instanceof Array) { 
    // do something 
} else { 
    // do another stuff 
} 

Mais cela échouera si votre JSON a été créé dans un autre cadre. Une autre option est de vérifier toString()

Object.prototype.toString.call(key).indexOf('Array') > 0 

ou pour vérifier

Array.isArray(key) 

mais il n'a pas pris en charge par tous les navigateurs.

Description typeof vous pouvez voir ici https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof

+0

Voir [ici] (http://stackoverflow.com/questions/4775722/javascript-check-if-object-is-array) pour des raisons pour lesquelles 'instanceof' ne fonctionne pas toujours –

+0

Mauvais choix pour utiliser indexOf (" Array "), et si l'objet est un tableau typé, par exemple Int32Array – Xotic750

+0

@ Xotic750 OP mentionne que l'objet original est JSON Selon les spécifications JSON http://www.json.org/ contient uniquement des tableaux simples (non typés) – Vadim

Questions connexes