2011-06-30 51 views
5

Giả sử rằng chúng ta có đối tượng JSON sau đó mô tả một Person:JSON đối tượng thao tác

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

}

Ai đó có thể đề nghị cách thanh lịch nhất và hiệu quả nhất để thao tác các đối tượng trước đó trong Rails 3 ?

Tôi muốn để có thể:

  1. Thêm một yếu tố khác như "firstname", "lastname", vân vân.
  2. Xóa phần tử hiện có
  3. Thay đổi phần tử mà không xóa phần tử đó hoặc thêm phần tử mới. (ví dụ: đổi tên thành "Nick")

Xin cảm ơn trước.

PS. Tôi thích điều khiển nó trong Bộ điều khiển!

+0

bạn có thể cung cấp thêm một chút ngữ cảnh không? Ví dụ, bạn đang tìm cách thao tác nó ở đâu? trong bộ điều khiển, trong javascript, trong nhà bếp của bạn trong khi pha cà phê? – jaydel

+0

Cảm ơn bạn đời. Đã thay đổi câu hỏi! – glarkou

Trả lời

25

chỉ phân tích nó và thay đổi nó

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

T.B. JSON.parse có thể không hoạt động - nó phụ thuộc vào thư viện JSON bạn đang sử dụng. hãy thử thay vào đó:

ActiveSupport::JSON.decode(json_data) 
+0

Điều gì sẽ xảy ra nếu tôi muốn xóa hoặc chỉnh sửa hoặc thêm trường để giải quyết? Ví dụ: xóa trường "streetAddress"? Bạn có thể đưa ra một ví dụ cho điều đó không? – glarkou

+1

Các đối tượng lồng nhau được phân tích cú pháp, vì vậy chỉ cần thực hiện băm ["address"] ["streetAddress"] = "42" và hash ["address"]. Delete ("city") – keymone