2010-12-07 15 views
2

だから:ハッシュのjsonハッシュをjavascriptの配列のハッシュに変換するにはどうすればよいですか?私が持っている場合は

var hashof = {"stuff": 
{"1": { "name": "fred"}}, 
{"2": { "name": "barney"}} 
}; 

はどうやって取得するにはjavascript関数を使用することができます。

var hashof = {"stuff": 
["name" : "fred"], 
["name" : "barney] 
}; 

私はmustache.jsと構造を使用することができるようにしたいです。

+0

あなたが持っているもの(最初のコード)は有効ではありませんJS:* "SyntaxError:予期しないトークン{" *あなたは本当に何を持っていますか? –

+0

予期せぬトークンは、 "barney"の後ろの見落とされた見積もりに由来する可能性があります。そうでなければ、それは有効です。 –

+1

@ Ryan Kinal:ああ、あなたはその見積もりに合っています。しかし、それでも有効ではない場合、エラーは次のようになります。* SyntaxError:予期しないトークン:*。 {{"stuff":{"1":{"name": "fred"}}、{"2":{"name": "barney"}}} 'のように書くと、これが有効でないことはかなり明確です。 '}}と' {"2": 'の間にキーがありません。 –

答えて

2

後者はできません。無効です。

var hashof = {"stuff": [ 
    {"name" : "fred"}, 
    {"name" : "barney"} 
] }; 

あなたがそれを必要とするように、次はそれを変換する必要があります:あなたは、おそらくこのような何かをしたかった

function convert(input) { 
    var output = [], 
     key; 

    for (key in input.stuff) { 
     if (input.stuff.hasOwnProperty(key)) { 
      output[parseInt(key, 10)] = input.stuff[key]; 
     } 
    } 

    return {stuff: output}; 
} 

は、結果の配列スパースであり得ることを、覚えておいてください。あなたはこれを避けたい場合は、あなたが

output.push(input.stuff[key]); 

でライン

output[parseInt(key, 10)] = input.stuff[key]; 

を交換使用することができますが、あなたは、元のキーを維持することができません(それが確保されていない、少なくとも) 。

+0

申し訳ありません、うん。ありがとう。 – richt

1

Javascriptが連想配列を持っていません。これと同等のものは、あなたが呼んでいるときの「ハッシュ」か、それが実際にあるオブジェクトです。 {"stuff": [{"name": "fred"}, {"name": "barney"}]}

以下はテストされていませんが、少なくとも正しい方向を指すようにしてください。

var input = {"stuff": {"1": { "name": "fred"}}, {"2": { "name": "barney"}} }, 
    output = {}, key, innerKey; 
for key in input 
{ 
    output[key] = []; 
    for innerkey in input[key] 
    { 
     output[key].push(input[key][innerKey]); 
    } 
} 

編集: 入力オブジェクトは、私が予想形式(実際には、あるいは、私はそれを最初に読んだとき、私は読んでフォーマット)を持っていないようです。現在これは、2つのプロパティがあります。

  • 「もの」が{"2": {"name": "barney"}}に等しい別のキーなしのアイテム(キーは0かもしれないが、私はこの点についてよくわからないんですが)あり{"1": {"name": "fred"}}
  • に等しい

したがって、input.stuffには1つのアイテムしかありませんが、input[0]には別のアイテムがあります。次のような場合は、より意味をなさないでしょう:

var input = { 
    "stuff": { 
     "1": {"name": "fred"}, 
     "2": {"name": "barney"} 
    } 
} 

これが当てはまる場合、私のコードは機能します。与えられた入力では、それはされません。

+0

今すぐテストしてください。 ...ありがとう – richt

+0

それについてさらに考えてみると、私の編集のフォーマットからあなたが望むフォーマットへの変換は、ある種の問題点です。私の編集のフォーマットは、オブジェクト内の1インデックス配列とほぼ同じです。 –

+0

Ryan-私はドットネットJSONUTILSを使用して、ms-access db(選択肢なし)からjsonを扱います。データは、あなたがそれを表現したものです。私はff 3.6.12エラーコンソールで作業していますが、エラーは発生していません。ありがとう!!! – richt

0

私は本当にこれをテストすべきですが、速くて汚れているように見えますが...

$.each(hashof.stuff, function(index, val) { 
    hashof.stuff[index] = val.index; 
    }); 
+0

jqueryの強力な引数のように見える(これはjquery、yes?)。 – richt

+0

はい、元の質問にはjQueryタグが付いていたと思いますが、以前は間違っていました。 – Hogan

関連する問題