web-dev-qa-db-fra.com

Le meilleur moyen de coder des tuples avec json

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?.

36
f4hy

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]]
21
Eli Courtwright

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(',')
7
Jarret Hardie

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.

2
David Berger

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.

1
Keith Gaughan

Serait-ce simplement un tableau à deux dimensions? Ensuite, vous pouvez utiliser des entiers comme clés

0