1

わからなくて困っていたのでこちらで質問させていただきました。Ruby 1.8.7 と RoR 1.2.6 を使用しています。この JSON をレンダリングするコントローラーがあります。

{
  "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"
            }
        }
    }
  }
}

このコードは、私が作成しているフォームビルダーで使用されています。人が作成したフォーム要素が、作成した正しい順序で表示されないのは本当に良くありません。出力時またはその直前に順序を維持または並べ替えることができますか?

4

2 に答える 2

1

どうぞ:

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

これにより、値ハッシュ内のキーの整数値に基づいてハッシュがソートされ、ソートされたハッシュがより大きなハッシュに戻されます。

すべてのハッシュを保持する必要がある場合は、次のようにします。

 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
于 2012-04-18T16:10:10.250 に答える
-2

1.9.x の ruby​​ バージョンにアップグレードして、ハッシュ順序を取得します

于 2013-03-27T21:10:37.380 に答える