在Javascript中表示复杂/嵌套数据

时间:2012-08-16 22:39:54

标签: javascript ruby-on-rails ajax dictionary

我试图通过JSON将一些稍微复杂的Rails应用程序发送到JS脚本,以一些有趣的方式呈现页面。让我们说Rails中的数据是关于人和他们的资产的,看起来像这样:

[
  {:name => 'Bill Smith', :state => 'KS'} => [
    {:type => 'house', :valuation => 150000},
    {:type => 'car', :valuation => 10000}
  ], 
  {:name => 'Bubba Jack', :state => 'FL'} => [
    {:type => 'boat', :valuation => 12000}
  ]
]

在JS方面,我希望能够访问各个字段。但是,JS不允许对象的键是对象,因此data.to_json将所有人员详细信息转换为一个字符串,如下所示: / p>

[{"{:name=>\"Bill Smith\", :state=>\"KS\"}":[{"type":"house","valuation":150000},{"type":"car","valuation":10000}],"{:name=>\"Bubba Jack\", :state=>\"FL\"}":[{"type":"boat","valuation":12000}]}]

我不能做像

这样的事情
var people = Object.keys(data);
for(var i=0; i<people.length; i++) {
    var totAsset = 0;
    var person = people[i];
    for(var j=0;j<data[person].length; j++) {
        totAssset = totAsset + data[person][j].valuation
    }
    alert("got person named " +person.name+" having $"+totAsset);
}

在AJAX应用程序的JS端表示和使用复杂数据的“正确”方法是什么?

更新:因此,sgrif和Andrew的答案都提供了解决此特定问题的方法。我已经对它们进行了投票,但是我会等一些,看看是否有更普遍的想法,在接受之前,有人必须将对象表示为键或具有该功能的东西。

2 个答案:

答案 0 :(得分:2)

[
  {name: "Bill Smith", state: "KS", possessions: [
    {type: "house", valuation: 1500000},
    {type: "car", valuation: 10000}
  ]},
  etc...
]

答案 1 :(得分:1)

如此组织您的记录会不会更容易:

@people = [
    {:name => 'Bill Smith', :state => 'KS', :assets => [
        {:type => 'house', :valuation => 150000},
        {:type => 'car', :valuation => 10000}
    ]}, 
    {:name => 'Bubba Jack', :state => 'FL', :assets => [
        {:type => 'boat', :valuation => 12000}
    ]}
]

然后使用“render:json =&gt; @people”,它会给你。

{[ "name": 'Bill Smith', "state": 'KS', "assets": [
    {"type": 'house', "valuation": 150000},
    {"type": 'car', "valuation": 10000},
],
[ "name": 'Bubba Jack', "state": 'FL', "assets": [
    {"type": 'boat', "valuation": 12000}
]}

然后访问这些值。

'Bill Smith' = people[0]["name"]
'house'      = people[0]["assets"][0]["type"]