0

我如何从下面显示的 json 访问年份,我从 url 获取并使用解码

obj = ActiveSupport::JSON.decode(response.body)

以下是我解码后得到的响应

{
  "educations"=>{"_total"=>1, 
                 "values"=>[
                            {"id"=>18234534505, 
                             "schoolName"=>"Test", 
                             "startDate"=>{"year"=>2013}
                            }
                           ]
                }
}

我如何访问年份?我可以访问这些值

obj['教育']['价值观']

它响应为

{"id"=>18234534505, "schoolName"=>"Test", "startDate"=>{"year"=>2013}}

但我怎样才能得到年份?请帮我。

更新:

我如何在这里添加 if 条件?

obj["educations"]["values"].each do |value|

@user_education = Education.new("start_date" => value['startDate']['year'], "education_id" => value['id'], "school_name" => value['schoolName'])

结尾

所以在这里,如果没有年份,那么我该如何检查你所说的?并且可能还有类似于 startDate 的 endDate 那么我该如何检查呢?

4

1 回答 1

2

只需访问密钥

obj["educations"]["values"].first["startDate"]["year"]

# above is answer if there is always one array inside `obj["educations"]["values"]`

对于多个数组的

year = []

obj["educations"]["values"].each do |object|
  year << object["startDate"]["year"] if !object["startDate"].blank? and !object["startDate"]["year"].blank?
end

更新 :

如果要添加属性到

@user_education = Education.new
@user_education.start_date = value['startDate']['year'] if !value['startDate'].blank? and !value['startDate']['year'].blank?
@user_education.education_id = value['id'] if !value['id'].blank?
@user_education.school_name = value['schoolName'] if !value['schoolName'].blank?

对于任何其他属性也是如此..

obj["educations"]["values"].each do |value|
  @user_education = Education.new("education_id" => value['id'], "school_name" => value['schoolName'])
  @user_education.start_date = value["startDate"]["year"] if !value["startDate"].blank? and !object["startDate"]["year"].blank?
  @user_education.save! #To save the object
end
于 2013-10-31T07:02:46.240 回答