【问题标题】:Can't map JSON data to model无法将 JSON 数据映射到模型
【发布时间】:2016-04-09 13:36:37
【问题描述】:

目前正在尝试调用 API 并将属性映射到我的模型。例如从 JSON 响应到模型中图像字符串的 image_src 字符串。但是现在它得到了错误'没有将String隐式转换为Integer'。

Feed.rb

require 'httparty'
require 'json'

class Feed < ActiveRecord::Base
  include HTTParty
  base_uri 'https://extraction.import.io/query/runtime'
  has_many :entries

  # GET /feeds
  # GET /feeds.json

  def fetch_data

    response = self.class.get("/2365205f-8502-439e-a6d2-73988cfa03f1?&url=http%3A%2F%2F%2F")
    @elements = response.parsed_response["extractorData"]

    @elements.map do |image_info|
      self.entries.create(image: image_info['url'])
    end

  end
end

Entry.rb

class Entry < ActiveRecord::Base
  belongs_to :feed
end

HTML

<% @feed.entries.each do |image| %>
  <div class="grid-item">
    <%= image_tag(image) %>
  </div>
<% end %>

JSON 响应

{
  "extractorData": {
    "url": "http://linxspiration.com/",
    "resourceId": "e26012fd5f25602c1c4e0945a7507e1f",
    "data": [
      {
        "group": [
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/0a38dd25a41e0702940c084b60bee860/tumblr_o5c0tyGhOP1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142509606341"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://36.media.tumblr.com/276def9e46bdfb9efee7f7d4e4444195/tumblr_o5c0szx4F21qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142506402604"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/4953cdecc24389d94844dfb88c819d8c/tumblr_o055uh8b7h1uhpqwfo1_1280.jpg",
                "href": "http://linxspiration.com/post/142503176501/linxsupply-discipline-gets-shit-done-buy-this"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://41.media.tumblr.com/353f10283fc3a0237262629b6a395c90/tumblr_o5aadrw6l31qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142499072059"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/889c65a662a1b690f299593e3581b947/tumblr_o57uysuSjF1tq9q5vo1_1280.jpg",
                "href": "http://linxspiration.com/post/142493659142/blazepress-sunrise-in-venice"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://45.media.tumblr.com/14c24e549a6559b48933f05ff40e3627/tumblr_o57vmsJ7gk1tq9q5vo1_400.gif",
                "href": "http://linxspiration.com/post/142488060049/blazepress-i-lick-paw"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://36.media.tumblr.com/f184f397d14563c9e41136c5fe370016/tumblr_o59oo0pUy61qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142476686818"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/453b70fd4055952e907766a5942cc560/tumblr_o59ohsGHBo1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142470776914"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://41.media.tumblr.com/1de6c873de55ddb899f83441454ff5bb/tumblr_o59ohhnd0k1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142465333421"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/f71b3ee53f51a9679dc65096933f2b08/tumblr_o59of8kouq1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142456009994"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/b6aa0dc78619a6b9e09b232224c0bfb7/tumblr_o59oeu18Ly1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142452801623"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://41.media.tumblr.com/d1c5a23af31880d10fd89fc8a6a0b8e6/tumblr_o585z3mPuF1tq9q5vo1_1280.jpg",
                "href": "http://linxspiration.com/post/142449893982/blazepress-life"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://41.media.tumblr.com/03369de74399e12e1901b3751917c512/tumblr_o54gbfJlXx1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142445969058"
              }
            ]
          },
          {
            "image": [
              {
                "src": "http://40.media.tumblr.com/6543cbb31ea206a59cbdd1e865d63562/tumblr_o54mncUOEP1qkegsbo1_1280.jpg",
                "href": "http://linxspiration.com/post/142440337822"
              }
            ]
          }
        ]
      }
    ]
  },
  "pageData": {
    "statusCode": 200,
    "timestamp": 1460206655245
  }
}

任何帮助都会很棒!

【问题讨论】:

标签: ruby-on-rails json ruby-on-rails-4


【解决方案1】:
response = self.class.get("/2365205f-8502-439e-a6d2-73988cfa03f1?&url=http%3A%2F%2F%2F")
puts response.parsed_response

表明身份验证失败:

<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>openresty/1.9.7.3</center>
</body>
</html>


def fetch_data
  ...
  @elements = response.parsed_response["extractorData"]

  # To access the image src's:
  image_srcs = @elements['data'].first['group'].map{ | z | z['image'].first['src']}

  image_srcs.each do |src|
    self.entries.create(image: src)
  end
end

【讨论】:

  • 身份验证失败,因为我从请求中删除了我的 API 密钥;)。您能否将答案包含在原始模型中?我会把你的补充放在哪里?感谢您的回答
  • 好的,您删除了 API 密钥,这很好。关于“你能在原始模型中包含答案吗?”,它在原始模型中。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 2015-10-21
  • 2015-11-12
  • 2022-08-11
  • 2011-07-15
相关资源
最近更新 更多