用json编码元组的最佳方法

时间:2009-04-03 20:14:25

标签: python json

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

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

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

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

5 个答案:

答案 0 :(得分:22)

您可以考虑说

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

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

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

所以不要说

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

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

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

答案 1 :(得分:7)

如果你的关键元组是真正的整数对,那么最简单也可能是最简单的方法就是你建议....将它们编码为一个字符串。你可以用一行代码来完成这个任务:

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

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

'1,2'.split(',')

答案 2 :(得分:2)

我的建议是:

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

它仍在解析,但根据您的使用方式,这种形式可能会更容易。

答案 3 :(得分:1)

您不能将数组用作JSON中的键。你能做的最好就是编码。对不起,但实际上没有其他理智的方法。

答案 4 :(得分:0)

它可能只是一个二维数组吗?然后你可以使用整数作为键