2012-04-18 13 views
1

私はこれを理解するのに問題がありましたので、私はここで尋ねると思いました。私はRuby 1.8.7とRoR 1.2.6を使用しています。私は私のコントローラは、このJSONをレンダリングする必要があり:Ruby 1.8.7 JSON.parseを使用したハッシュの並べ替え

{ 
    "form_id": "1", 
    "form_structure": { 
    "3": { 
     "answer_required": "undefined", 
     "title": "This is a radio group, right?", 
     "cssClass": "radio", 
     "values": { 
      "4": { 
       "value": "Yes", 
       "baseline": "undefined" 
      }, 
      "5": { 
       "value": "No", 
       "baseline": "undefined" 
      }, 
      "7": { 
       "value": "Maybe", 
       "baseline": "undefined" 
      }, 
      "20": { 
       "value": "Test", 
       "baseline": "undefined" 
      } 
     } 
    } 
    } 
} 

あなたが見ることができるように、「値」の下のオプションは、テーブルからIDによって順序付けられます。 JSONで完璧に見えます。私はそれにJSON.parseを使用する場合は、「値」の下のすべてが調子が悪いの全てを取得し、それがこれを返します。

{ 
    "form_id"=>"1", 
    "form_structure"=>{ 
    "3"=>{ 
     "title"=>"This is a radio group, right?", 
     "cssClass"=>"radio", 
     "answer_required"=>"undefined", 
     "values"=>{ 
      "7"=>{ 
       "baseline"=>"undefined", 
       "value"=>"Maybe" 
      }, 
      "20"=>{ 
       "baseline"=>"undefined", 
       "value"=>"Test" 
      }, 
      "4"=>{ 
       "baseline"=>"undefined", 
       "value"=>"Yes" 
      }, 
      "5"=>{ 
       "baseline"=>"undefined", 
       "value"=>"No" 
      } 
     } 
    } 
    } 
} 

このコードは、私が作ってるんだformbuilderに使用され、そしてそれは本当に素敵ではないでしょう人が構築したフォーム要素が正しい順序で表示されていない場合は、誰でもその注文を保持したり、出力したり直前に並べ替える方法についての洞察を得ていますか?ここで

+0

一切のRubyバージョン1.8.9はありません... –

+2

'Hash' 1.8.7では順序付けされていないので、 '{" values "=> [[7" {"baseline" => ...}]、[20、... '?とにかく、ハッシュを注文することは難しいビジネスです。定義によって、 –

+2

ハッシュは順序を持たない。それを処理し、配列に変更します。 –

答えて

1

あなたが行く:

form["form_structure"]["3"]["values"] = 
form["form_structure"]["3"]["values"].sort { 
     |a,b| a[0].to_i <=> b[0].to_i 
} 

これは、値のハッシュのキーの整数値に基づいてハッシュをソートし、バックより大きなハッシュでソートされたハッシュを入れます。

あなたはそれをすべて保持する必要がある場合は、まだこの使用をハッシュ:ハッシュ順番に取得するには1.9.xルビーバージョンに

val = {} 
val = form["form_structure"]["3"]["values"].sort { 
     |a,b| a[0].to_i <=> b[0].to_i } 
ind = [] 
val.each { |v| ind += [v[0]] } 
val = {} 
ind.each { |k| val[k] = form["form_structure"]["3"]["values"][k] } 
form["form_structure"]["3"]["values"] = val 
+0

Errを意味しました。実際には、これはキー 'values'のHashをソートされた配列に変換します。 Ruby 1.8ではハッシュオーダーは決して保証されません –

+0

ハッシュと同じ方法で配列にアクセスすることはできませんので、動作はまったく異なります。 –

+0

ハッシュの順序付きハッシュになりました。はい、理論的には、あなたは秩序に頼ることはできませんが、現実の生活の中で、あなたはしばらくすることができ、それが彼が本当に必要とするものです。 –

-2

アップグレード

関連する問題