如何通过RubyonRails中的API GET请求访问JSON数组中的嵌套对象/属性(并将其保存到数据库中)



如何通过Ruby on Rails中的API GET请求访问JSON数组中的嵌套对象/属性(并将其保存到postgresQL数据库中(?

我已经访问了所有的属性,如PropertyNumber等,这被保存到我的数据库中,并在我的前端显示。我还想使用这些信息来执行计算等。除了包含嵌套对象的ValuationReport属性外,我可以对JSON对象的所有属性执行此操作。

ValuationReport属性似乎是一个数组对象,包含一个或多个ValuationReports对象(每个对象包含5个属性-Level、FloorUse、Area、NavPerM2和Nav(。我想访问这些信息,并以与处理其他属性相同的方式将每个信息单独保存到我的数据库中。目前,它似乎以对象或字符串的形式保存到我的数据库中,并在前端显示如下:

[{"级别"=>"1","楼层使用"="办公室(S(","面积"=>23.89,"NavPerM2"=<70.0,"Nav"="1672.3},{"等级"=&&gt;"0","层使用"=&办公室(S(","面积"=>74.57,"NavPerM2"=>100.0,"Nav"=>7457.0}]

这是我的seeds.rb文件:

require 'rest-client'
require 'json'
# Define Method - API Request
def properties
response = RestClient.get('https://api.valoff.ie/api/Property/GetProperties?Fields=*&LocalAuthority=CARLOW%20COUNTY%20COUNCIL&CategorySelected=OFFICE&Format=json&Download=false')
json = JSON.parse(response)

json.each do |property|
puts "Creating property #{property['PropertyNumber']}"
Property.create!(
publication_date: property['PublicationDate'],
property_number: property['PropertyNumber'],
county: property['County'],
local_authority: property['LocalAuthority'],
valuation: property['Valuation'],
category: property['Category'],
uses: property['Uses'],
address_1: property['Address1'],
address_2: property['Address2'],
address_3: property['Address3'],
address_4: property['Address4'],
address_5: property['Address5'],
car_park: property['CarPark'],
xitm: property['Xitm'],
yitm: property['Yitm'],
valuation_report: property['ValuationReport']
)
end
end
# Call Method
properties

这是我的schema.rb文件:

create_table "properties", force: :cascade do |t|
t.string "publication_date"
t.string "property_number"
t.string "county"
t.string "local_authority"
t.string "valuation"
t.string "category"
t.string "uses"
t.string "address_1"
t.string "address_2"
t.string "address_3"
t.string "address_4"
t.string "address_5"
t.string "car_park"
t.string "xitm"
t.string "yitm"
t.string "valuation_report"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end

我预计我需要将5个单独的属性添加到我的模式中(Level、FloorUse、Area、NavPerM2和Nav(,以便单独保存它们。或者,它们可以从ValuationReport属性中访问,并在控制器中进行解析以进行计算,或者在html.erb文件中进行清晰显示。我对此不确定。

感谢您阅读本文并提供帮助。

这是通过创建一个属性并使用其单位ID来解决的:

require 'rest-client'
require 'json'
# Define Method - API Request
def properties
response = RestClient.get('https://api.valoff.ie/api/Property/GetProperties?Fields=*&LocalAuthority=CAVAN%20COUNTY%20COUNCIL&CategorySelected=OFFICE&Format=csv&Download=false')
json = JSON.parse(response)
json.each do |property|
puts "Creating property #{property['PropertyNumber']}"
property_model = Property.create!(
publication_date: property['PublicationDate'],
property_number: property['PropertyNumber'],
county: property['County'],
local_authority: property['LocalAuthority'],
valuation: property['Valuation'],
category: property['Category'],
uses: property['Uses'],
address_1: property['Address1'],
address_2: property['Address2'],
address_3: property['Address3'],
address_4: property['Address4'],
address_5: property['Address5'],
car_park: property['CarPark'],
xitm: property['Xitm'],
yitm: property['Yitm']
)

property['ValuationReport'].each do |unit|
puts "Creating unit."
property_model.units.create!(
level: unit['Level'],
floor_use: unit['FloorUse'],
area: unit['Area'],
nav_per_m2: unit['NavPerM2'],
nav: unit['Nav']
)
end
end
end
# Call Method
properties

参考:RubyonRails:如何使用JSONPath访问(并保存到数据库(JSON数组中的嵌套对象/属性?

最新更新