繁体   English   中英

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

[英]How can I access (and save to my database) nested objects/properties within a JSON array via an API GET request in Ruby on Rails?

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

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

ValuationReport 属性似乎是一个数组对象,其中包含一个或多个 ValuationReport 对象(每个对象包含 5 个属性 - Level、FloorUse、Area、NavPerM2 和 Nav)。 我想访问这些信息并将每个信息单独保存到我的数据库中,就像我对其他属性所做的一样。 目前它似乎作为对象或字符串保存到我的数据库中,并在前端显示如下:

[{"Level"=>"1", "FloorUse"=>"OFFICE(S)", "Area"=>23.89, "NavPerM2"=>70.0, "Nav"=>1672.3}, {"Level"= >"0", "FloorUse"=>"OFFICE(S)", "Area"=>74.57, "NavPerM2"=>100.0, "Nav"=>7457.0}]

这是我的 seed.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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM