2009-04-03 11 views
31

私は、タプルをタプルのリストにマップする辞書を持っています。例えばjsonでタプルをエンコードする最も良い方法

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

私はJavaScriptでそれを使用するこのデータを符号化することができるようにしたいので、私はJSONに見えたが、私のタプルがキーとして動作しないように、キーは文字列でなければなりません表示されます。

これを処理する最善の方法は、 "1,2"としてエンコードし、それをJavaScriptで必要なものに解析することですか?または、これを処理するより巧妙な方法があります。

答えて

19

あなたが値を取得する必要があるときに、あなただけのすべての最新ブラウザ内蔵JSON.parseの方法で行うことができますJSONオブジェクトとしてのキー自体を解析することができます

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

と言って検討するかもしれません(私はここで繰り返すために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 

は、あなたが

myjson[1][2] // returns [[2,3],[1,7]] 
+1

入れ子の辞書のアイデアをありがとう!私はそれを考えなかったでしょう。どんなアプローチが私にとってはうまくいくのか分かりませんが、きちんとしたアイデアのように思えます、ありがとう! – f4hy

0

それは単に2次元配列ですか?そして、あなたは私の推薦は次のようになり、キー

+0

二次元アレイがで不器用ですそれ以外の場合は動作する可能性があります。 – f4hy

2

として整数を使用することができます:

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

それはまだ解析していますが、あなたがそれを使用する方法に応じて、それがこの形式で容易であろう。

1

JSONでキーとして配列を使用することはできません。あなたができることは、それをエンコードすることです。申し訳ありませんが、本当にそれを行うための他の元気な方法はありません。

7

を言うことができると言ってあなたが示唆している通りにそれらを文字列にエンコードする簡単なアプローチがあります。あなたはワンライナーでこれを行うことができます。

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

これはあなたに、キーあなたはその後、再びポイントを獲得するために分割することができjavascriptのデータ構造を得るでしょう:

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

noskloを編集していただきありがとうございます。みんな良いエディタが必要です:-) –

+0

Cool。コードサンプルもありがとう! – f4hy

+0

この特定の例では、tuple( '1,2'.split('、 '))です。質問の例がThe Normであれば、 '1,2'.split('、 ')))のsのタプル(int(s))が必要です。 – pythonlarry

関連する問題