2012-08-16 3 views
0

내 Rails 앱에서 JSON을 통해 JS 스크립트로 약간 복잡한 것을 보내서 흥미로운 방식으로 페이지를 렌더링하려고합니다. JS 측면에서 자바에서 복잡한/중첩 된 데이터 표현하기

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

, 나는 그러나, 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}]}] 

내가 할 수없는 것들에 대한 '올바른'방법은 무엇

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); 
} 

같은 복잡한 d를 표현하고 사용한다. AJAX 앱의 JS 측에서 ata?

업데이트 : 그래서 sgrif와 Andrew의 답변은이 특정 문제에 대한 해결책을 제공합니다. 저는 두 가지 모두 upvoted 했습니다만, 받아들이 기 전에 누군가가 객체를 키 또는 그 기능을 가진 것으로 표현해야한다는 좀 더 일반적인 생각이 있는지를보기 위해 몇 가지를 기다릴 것입니다.

답변

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} 
    ]} 
] 

그런 다음 사용 "렌더링 : 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"] 
2
[ 
    {name: "Bill Smith", state: "KS", possessions: [ 
    {type: "house", valuation: 1500000}, 
    {type: "car", valuation: 10000} 
    ]}, 
    etc... 
]