json을 객체 루비로 구문 분석
다른 리소스를 조사했는데 json 형식을 커스텀 오브젝트로 해석하는 방법이 헷갈립니다.
class Resident
attr_accessor :phone, :addr
def initialize(phone, addr)
@phone = phone
@addr = addr
end
end
및 JSON 파일
{
"Resident": [
{
"phone": "12345",
"addr": "xxxxx"
}, {
"phone": "12345",
"addr": "xxxxx"
}, {
"phone": "12345",
"addr": "xxxxx"
}
]
}
json 파일을 3개의 레지던트 오브젝트 배열로 해석하는 올바른 방법은 무엇입니까?
오늘은 json을 오브젝트로 변환하는 것을 찾고 있었습니다만, 이것은 매우 매력적입니다.
person = JSON.parse(json_string, object_class: OpenStruct)
이렇게 하면person.education.school
또는person[0].education.school
응답이 배열인 경우
여기 두고 가는 이유는 누군가에게 유용할 수도 있기 때문이다.
다음 코드는 더 간단합니다.
require 'json'
data = JSON.parse(json_data)
residents = data['Resident'].map { |rd| Resident.new(rd['phone'], rd['addr']) }
사용하시는 경우ActiveModel::Serializers::JSON
그냥 전화하면 돼from_json(json)
그러면 오브젝트가 이러한 값으로 매핑됩니다.
class Person
include ActiveModel::Serializers::JSON
attr_accessor :name, :age, :awesome
def attributes=(hash)
hash.each do |key, value|
send("#{key}=", value)
end
end
def attributes
instance_values
end
end
json = {name: 'bob', age: 22, awesome: true}.to_json
person = Person.new
person.from_json(json) # => #<Person:0x007fec5e7a0088 @age=22, @awesome=true, @name="bob">
person.name # => "bob"
person.age # => 22
person.awesome # => true
require 'json'
class Resident
attr_accessor :phone, :addr
def initialize(phone, addr)
@phone = phone
@addr = addr
end
end
s = '{"Resident":[{"phone":"12345","addr":"xxxxx"},{"phone":"12345","addr":"xxxxx"},{"phone":"12345","addr":"xxxxx"}]}'
j = JSON.parse(s)
objects = j['Resident'].inject([]) { |o,d| o << Resident.new( d['phone'], d['addr'] ) }
p objects[0].phone
"12345"
우리는 최근에 루비 라이브러리를 출시했다.static_struct
문제를 해결합니다.이것 좀 봐봐요.
언급URL : https://stackoverflow.com/questions/12723094/parse-json-to-object-ruby
'programing' 카테고리의 다른 글
Angular.js 및 HTML5 날짜 입력 값 -- Firefox가 날짜 입력에 읽을 수 있는 날짜 값을 표시하도록 하려면 어떻게 해야 합니까? (0) | 2023.04.04 |
---|---|
스프링 부트 - 초기 데이터 로드 중 (0) | 2023.04.04 |
JSON을 쿼리 문자열에 직렬화하는 표준화된 방법? (0) | 2023.04.04 |
데이터베이스에서 django 모델을 생성할 수 있습니까? (0) | 2023.04.04 |
페이지가 상위 페이지인지 하위 페이지인지 확인하시겠습니까? (0) | 2023.04.04 |