En python, j'ai un dictionnaire qui mappe des n-uplets à une liste de n-uplets. par exemple.
{(1,2): [(2,3),(1,7)]}
Je veux pouvoir encoder ces données, les utiliser en javascript. Je me suis donc penché sur json, mais il semble que les clés doivent être des chaînes pour que mon Tuple ne fonctionne pas comme une clé.
Est-ce que la meilleure façon de gérer cela est de l'encoder comme "1,2" et ensuite de l'analyser dans quelque chose que je veux sur le javascript? Ou existe-t-il un moyen plus intelligent de gérer cela?.
Vous pourriez envisager de dire
{"[1,2]": [(2,3),(1,7)]}
et ensuite, lorsque vous devez extraire la valeur, vous pouvez simplement analyser les clés elles-mêmes en tant qu'objets JSON, ce que tous les navigateurs modernes peuvent utiliser avec la méthode JSON.parse
intégrée (j'utilise jQuery.each
pour l'itérer ici, mais vous pouvez utiliser n'importe quoi) :
var myjson = JSON.parse('{"[1,2]": [[2,3],[1,7]]}');
$.each(myjson, function(keystr,val){
var key = JSON.parse(keystr);
// do something with key and val
});
D'autre part, vous voudrez peut-être simplement structurer votre objet différemment, par exemple.
{1: {2: [(2,3),(1,7)]}}
de sorte qu'au lieu de dire
myjson[1,2] // doesn't work
qui est la syntaxe Javascript invalide, vous pourriez dire
myjson[1][2] // returns [[2,3],[1,7]]
Si vos tuples de touches sont vraiment des paires d'entiers, l'approche la plus simple et probablement la plus simple serait comme vous le suggérez… de les encoder en chaîne. Vous pouvez le faire dans une ligne:
>>> simplejson.dumps(dict([("%d,%d" % k, v) for k, v in d.items()]))
'{"1,2": [[2, 3], [1, 7]]}'
Vous obtiendrez ainsi une structure de données javascript dont vous pourrez ensuite séparer les clés pour récupérer les points:
'1,2'.split(',')
Ma recommandation serait:
{ "1": [
{ "2": [[2,3],[1,7]] }
]
}
C'est toujours l'analyse, mais selon l'utilisation que vous en faites, ce sera peut-être plus facile.
Vous ne pouvez pas utiliser un tableau comme clé dans JSON. Le mieux que vous puissiez faire est de l'encoder. Désolé, mais il n'y a vraiment aucun autre moyen sensé de le faire.
Serait-ce simplement un tableau à deux dimensions? Ensuite, vous pouvez utiliser des entiers comme clés