在python中,我有一个将元组映射到元组列表的字典。例如
{(1,2): [(2,3),(1,7)]}
我希望能够使用javascript对这些数据进行编码,所以我查看了json,但看起来键必须是字符串,所以我的元组不能用作键。
处理此问题的最佳方法是将其编码为“1,2”,然后在javascript上将其解析为我想要的内容吗?或者有更聪明的方法来解决这个问题。
答案 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)
它可能只是一个二维数组吗?然后你可以使用整数作为键