ruby-on-rails - 将json反序列化为rails 5中的对象
问题描述
好的,所以我正在使用 http 派对让我从 json 示例中获取详细信息
我的问题我通常如何将其反序列化为允许在我的视图中使用的对象,因此我创建了一个名为 fetchjson.rb 的控制器我的问题是如何将其链接到我的视图以及如何获取模型对里亚尔有效 5
require 'httparty'
# Use the class methods to get down to business quickly
response = HTTParty.get('http://api.stackexchange.com/2.2/questions?site=stackoverflow')
puts response.body, response.code, response.message, response.headers.inspect
# Or wrap things up in your own class
class StackExchange
include HTTParty
base_uri 'api.stackexchange.com'
def initialize(service, page)
@options = { query: { site: service, page: page } }
end
def questions
self.class.get("/2.2/questions", @options)
end
def users
self.class.get("/2.2/users", @options)
end
end
stack_exchange = StackExchange.new("stackoverflow", 1)
puts stack_exchange.questions
puts stack_exchange.users
我在这里看到它已将其放入对象属性中,但是我如何将其传递给我的视图以在页面中使用。
我在我的真实世界中使用了这个示例,我正在使用诸如经度和纬度之类的字段以及在地图上放置图钉。我已经有了地图,我只需要不需要如何访问视图上的堆栈交换对象。
解决方案
将数据从控制器暴露给视图的最简单和最直接的方法,就像您对任何其他对象一样:实例变量。
class QuestionsController < ApplicationController
def index
stack_exchange = StackExchange.new("stackoverflow", 1)
@questions = stack_exchange.questions
end
end
HTTParty
有一个parsed_response
你可以调用的方法,它会尝试根据接收到的标头解析响应——如果是 XML,它会尝试将其解析为 XML。如果是 json,它会尝试将其解析为 JSON。然后,您将获得一个可以使用的对象:大概是一个 JSON-ish(数组或散列)对象。如果您需要自己查看响应,只需调用@questions.response.body
- 或挖掘可用的方法@questions.methods
。
我们可以通过点击来解决这个问题@questions.parsed_response.class
,它可能会返回哈希或数组(可能是哈希)。假设它是一个哈希,您可以@questions.parsed_response.keys
获取可用于访问值的键。如果它是一个数组(同样,可能是散列),@questions.parsed_response.first.keys
推荐阅读
- azure - Azure CloudFile UploadFromFile“指定的资源名称包含无效字符”
- c# - 具有多对多和过滤功能的 Linq 查询或 Lambda
- python - Colaboratory|OSError: [Errno 5] 输入/输出错误
- oracle - 在 Oracle 中使用多个命名空间更新 CLOB 列
- java - 对 List 对象参数和多列条件使用 Spring jdbc 模板
- r - 将表示 ggerrorplot 中平均值的点更改为一条线
- azure - Azure AAD 应用程序 ID 在整个 Azure 中是否唯一?
- visual-studio-2015 - 如何让发布者名称显示在 ClickOnce 安装程序对话框中
- c# - 在 C# 中使用具有相同 uri 但不同前缀的多个命名空间序列化 xml
- google-chrome-devtools - Puppeteer:以编程方式保存 Chrome 性能时间线以用于长时间运行的会话