2011-06-30 19 views
5

は、我々は人を記述し、次のJSONオブジェクトを持っていると仮定してみましょう:JSONオブジェクト操作

{ 
"firstName": "John", 
"lastName": "Smith", 
"age": 25, 
"address": 
{ 
    "streetAddress": "21 2nd Street", 
    "city": "New York", 
    "state": "NY", 
    "postalCode": "10021" 
}, 
"phoneNumber": 
[ 
    { 
     "type": "home", 
     "number": "212 555-1234" 
    }, 
    { 
     "type": "fax", 
     "number": "646 555-4567" 
    } 
] 

}

誰かがRailsの3で前のオブジェクトを操作するための最もエレガントで最も効率的な方法を提案することができます?

私のことができるようにしたい:

  1. "ファーストネーム"、 "姓" のような他の要素などを追加します。
  2. 既存の要素を削除する
  3. 要素を削除するか、新しい要素を追加することなく要素を変更します。 (例えば、ファーストネームを「Nick」に変更する)

ありがとうございます。

PS。私はコントローラでそれを操作することを好む!

+0

もう少し文脈を与えることができますか?たとえば、どこでそれを操作しようとしていますか?コントローラでは、JavaScriptで、あなたの台所では、ラテを作っている間? – jaydel

+0

ありがとうございます。質問を変更しました! – glarkou

答えて

25

ちょうどそれを解析し、それが

hash = JSON.parse(json_data) 
hash["firstname"] = "John" 
hash.delete("lastname") 
new_json = hash.to_json 

P.S.を変更JSON.parseが機能しない可能性があります。使用しているJSONライブラリによって異なります。代わりにこれを試してください:

ActiveSupport::JSON.decode(json_data) 
+0

住所を削除、編集、追加する場合はどうすればよいですか?たとえば、 "streetAddress"フィールドを削除しますか?あなたはそれについても例を挙げることができますか? – glarkou

+1

ネストされたオブジェクトも解析されるので、単純にhash ["address"] ["streetAddress"] = "42"とハッシュ["address"]を実行します。 – keymone

関連する問題