2010-04-16 10 views
4

J'ai besoin de savoir si des implémentations JSON peuvent gérer des tableaux clairsemés à ma satisfaction. J'ai vu la question: How to represent a sparse array in JSON? mais en utilisant un objet plutôt qu'un tableau n'est pas une option pour moi; J'ai besoin d'un tableau.Implémentations JSON qui gèrent des tableaux clairsemés

Mon exigence minimale serait que l'implémentation comble tous les espaces avec "indéfini". Sinon, j'écris du code défensif qui comble moi-même les lacunes, avant le codage JSON.

Répondre

5

Impossible. Oubliez les implémentations, ce n'est tout simplement pas autorisé dans les spécifications.

http://json.org/

Les tableaux sont définis par la valeur uniquement. Les objets sont pour quand l'index/clé a une signification.

+1

... et "indéfini" n'est pas une valeur JSON – Pointy

+0

point (s) pris (s); remplira donc les espaces avec null à la place –

+0

Eh bien, le problème est que JSON est JSON, et il n'y a aucun moyen de représenter directement un "tableau fragmenté" de sorte que tout analyseur JSON arbitraire le comprenne. Cependant, si vous êtes satisfait de la transformation de la matrice sur le chemin "in" et "out" de JSON, alors la réponse de @ Robusto est ce que vous voulez regarder. – Pointy

2

Pourriez-vous utiliser un objet dont le nom de propriété était un index et la valeur de la propriété était la valeur, puis l'exécuter via une fonction intermédiaire pour créer votre tableau fragmenté?

function getSparseArray(obj) { 
    var ary = []; 
    for (prop in obj) { 
    var i = parseInt(prop,10); 
    if (!isNaN(i)) { 
     ary[i] = obj[prop]; 
    } 
    } 
    return ary; 
} 

Vous envoyer quelque chose comme

{ "5":"Five", "11":"Eleven", "99":"Ninety-Nine"} 

et retourner un tableau qui a été peuplée avec seulement trois valeurs:

ary[5] = "Five" 
ary[11] = "Eleven" 
ary[99] = "Ninety-Nine" 
ary[0] = 'undefined' 
ary[98] = 'undefined' 
etc. 

ary ici aurait une longueur de 100, mais ce serait un tableau «clairsemé» dans votre sens.

+0

Je ne pense pas que ce soit ce qui a été demandé, mais je suis d'accord que c'est la meilleure voie à suivre. Bien sûr, on peut se demander si un simple tableau JSON avec beaucoup de valeurs "nulles" gâcherait quelque chose de plus petit de toute façon! – Pointy

+0

'ary [0]' serait 'non défini', pas' null' ... – James

+0

@ J-P: Vous avez raison, merci. Edité pour refléter votre commentaire. – Robusto

Questions connexes