Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Javascript表示复杂/嵌套数据_Javascript_Ruby On Rails_Ajax_Dictionary - Fatal编程技术网

用Javascript表示复杂/嵌套数据

用Javascript表示复杂/嵌套数据,javascript,ruby-on-rails,ajax,dictionary,Javascript,Ruby On Rails,Ajax,Dictionary,我试图通过JSON将稍微复杂的Rails应用程序发送到JS脚本,以某种有趣的方式呈现页面。假设Rails中的数据是关于人及其资产的,如下所示: [ {:name => 'Bill Smith', :state => 'KS'} => [ {:type => 'house', :valuation => 150000}, {:type => 'car', :valuation => 10000} ], {:name =>

我试图通过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}
  ]
]
[{"{: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将所有个人详细信息转换为一个字符串,如下所示:

[
  {:name => 'Bill Smith', :state => 'KS'} => [
    {:type => 'house', :valuation => 150000},
    {:type => 'car', :valuation => 10000}
  ], 
  {:name => 'Bubba Jack', :state => 'FL'} => [
    {:type => 'boat', :valuation => 12000}
  ]
]
[{"{: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);
}
var people=Object.keys(数据);

对于(var i=0;i来说,这样组织您的记录不是更容易吗:

@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=>@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"]

这样组织您的记录不是更容易吗:

@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=>@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"]