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 回答