2010-12-17 13 views
1

現在、Ruby on Railsプロジェクトにapiフィードを使用しています。 Rubyの新機能であるため、JSONを適切に使いこなして管理しているとは思えません。いくつかの機能が動作していないと私は彼らが私はそれを持っているJSONオブジェクトを扱っている方法の周りを回っていると思う。ここで私が働いているものがあります。JSONフィードを使用して適切なRubyにする

{ "auth" : { 
    "person" : { 
     "id" : 1, 
     "name" : "john", 
     "pass" : "123" 
    }, 
    "person" : { 
     "id" : 2, 
     "name" : "fred", 
     "pass" : "789" 
    } 
}} 

は私が行うことで、単純な配列を取得できます:ここでの問題はpersonArray.first(5)ような何かをしようとしている

jsonArray = JSON.parse(persons) 
# the following allows me to target the persons objects 
personArray = jsonArray["auth"]["persons"] 

すると、私は、文字列変換エラーにint型与えます。私はこれを実行可能なハッシュにしたいと思います。私は操作をオフにすることができますが、現在はハッシュとして反復処理しかできないようです。私は、この結果データを並べ替え、人を引き抜き、他の操作を行う必要があるかもしれません。どのようにこれを正しくインポートする必要がありますか?

+1

注意クラス/ Array.html);それは「ハッシュ」(http://ruby-doc.org/core/classes/Hash.html)です。 JavaScriptの 'object'を「連想配列」と呼ぶと、この種の厄介な用語につながります。 – Phrogz

答えて

2

実際にjson文字列を直接解析すると、["auth"]["persons"]が得られません。 json文字列の中には"persons"フィールドはありません......私はそれが誤植であることを願っています。仕事にpersonArray.first(5)を作るために必要な

正確なフォーマットは次のようになります。

{ 
    "auth": { 
    "persons": [ # Note the square bracket here, which defines an array instead of a hash 
     {"id": 1, "name": "john", "pass": "123"}, 
     {"id": 2, "name": "fred", "pass": "789"} 
    ] 
    } 
} 

、あなたが今やりたいこと行うことができます。

+0

はい、それはタイプミスでした。私はブラケット/ブレースの問題に気付かなかった。これは私が設計できなかったAPIですが、プロバイダーと連携することができます。人物を個別のオブジェクトではなく配列として扱うほうがはるかに意味があります。私はこれをテストし、それが動作すればこれをマークします。ありがとう! –

2

上記のJSONを使用すると、JSオブジェクトには思ったよりも少ないデータが格納されます。 personキーを繰り返し上書きしています。ウェブブラウザのコンソールにこれを貼り付け/コピーをお試しください: `上記のあなたのRubyコードでjsonArray`は[` Array`](http://ruby-doc.org/core/ではないこと

var o = { "auth" : { 
    "person" : { 
    "id" : 1, 
    "name" : "john", 
    "pass" : "123" 
    }, 
    "person" : { 
    "id" : 2, 
    "name" : "fred", 
    "pass" : "789" 
    } 
}}; 

JSON.stringify(o); 
// '{"auth":{"person":{"id":2,"name":"fred","pass":"789"}}}' 
関連する問題