用json编码元组的最佳方法

f4h*_*4hy 38 python json

在python中,我有一个将元组映射到元组列表的字典.例如

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

我希望能够使用javascript对这些数据进行编码,所以我查看了json,但是看起来键必须是字符串,所以我的元组不能作为键.

处理此问题的最佳方法是将其编码为"1,2",然后将其解析为我想要的javascript内容吗?或者是否有更聪明的方法来处理这个问题.

Eli*_*ght 23

你可以考虑说

{"[1,2]": [(2,3),(1,7)]}
Run Code Online (Sandbox Code Playgroud)

然后当你需要获取值时,你可以将键本身解析为JSON对象,所有现代浏览器都可以使用内置JSON.parse方法(我在jQuery.each这里迭代但你可以使用任何东西):

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
});
Run Code Online (Sandbox Code Playgroud)

另一方面,您可能希望以不同方式构造对象,例如

{1: {2: [(2,3),(1,7)]}}
Run Code Online (Sandbox Code Playgroud)

所以不要说

myjson[1,2] // doesn't work
Run Code Online (Sandbox Code Playgroud)

你可以说,这是无效的Javascript语法

myjson[1][2] // returns [[2,3],[1,7]]
Run Code Online (Sandbox Code Playgroud)

  • 感谢嵌套字典的想法!我不会想到的。不确定哪种方法对我更有效,但似乎是个好主意,谢谢! (2认同)

Jar*_*die 8

如果你的关键元组是真正的整数对,那么最简单也可能是最简单的方法就是你建议....将它们编码为一个字符串.你可以用一个班轮做到这一点:

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

这将为您提供一个javascript数据结构,您可以将其拆分以重新获得点数:

'1,2'.split(',')
Run Code Online (Sandbox Code Playgroud)