Best way to encode tuples with json

后端 未结 5 1846
有刺的猬
有刺的猬 2021-02-05 00:23

In python I have a dictionary that maps tuples to a list of tuples. e.g.

{(1,2): [(2,3),(1,7)]}

I want to be able to encode this data use it with j

相关标签:
5条回答
  • 2021-02-05 00:57

    If your key tuples are truly integer pairs, then the easiest and probably most straightforward approach would be as you suggest.... encode them to a string. You can do this in a one-liner:

    >>> simplejson.dumps(dict([("%d,%d" % k, v) for k, v in d.items()]))
    '{"1,2": [[2, 3], [1, 7]]}'
    

    This would get you a javascript data structure whose keys you could then split to get the points back again:

    '1,2'.split(',')
    
    0 讨论(0)
  • 2021-02-05 01:01

    My recommendation would be:

    { "1": [
            { "2": [[2,3],[1,7]] }
           ]
    }
    

    It's still parsing, but depending on how you use it, it may be easier in this form.

    0 讨论(0)
  • 2021-02-05 01:06

    You might consider saying

    {"[1,2]": [(2,3),(1,7)]}
    

    and then when you need to get the value out, you can just parse the keys themselves as JSON objects, which all modern browsers can do with the built-in JSON.parse method (I'm using jQuery.each to iterate here but you could use anything):

    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
    });
    

    On the other hand, you might want to just structure your object differently, e.g.

    {1: {2: [(2,3),(1,7)]}}
    

    so that instead of saying

    myjson[1,2] // doesn't work
    

    which is invalid Javascript syntax, you could say

    myjson[1][2] // returns [[2,3],[1,7]]
    
    0 讨论(0)
  • 2021-02-05 01:07

    You can't use an array as a key in JSON. The best you can do is encode it. Sorry, but there's really no other sane way to do it.

    0 讨论(0)
  • 2021-02-05 01:07

    Could it simply be a two dimensional array? Then you may use integers as keys

    0 讨论(0)
提交回复
热议问题