【问题标题】:Display Json in view在视图中显示 Json
【发布时间】:2015-04-03 00:15:03
【问题描述】:

尝试在我的视图中显示来自 json 文件的信息时遇到问题。我已经解析过了。

这是我的错误:

When assigning attributes, you must pass a hash as an argument.
Extracted source (around line #23):

21 # @new_member.constructors = [driver['Constructors'][0]['name']]
22      # @new_member.points = [driver['points']]
23      @new_member.from_json(json)

        @members << @new_member
    end

        # @new_member.constructors = [driver['Constructors'][0]['name']]
        # @new_member.points = [driver['points']]
        @new_member.from_json(json)

        @members << @new_member
    end

这是我的控制器:

require 'open-uri'
require 'json'

url = "http://ergast.com/api/f1/2014/driverStandings.json"
data = JSON.parse(open(url).read)
standings = data['MRData']['StandingsTable']['StandingsLists'][0]['DriverStandings']

@members = Array.new
standings.each do |driver|
    json = standings.to_json
    @new_member = Member.new
    # @new_member.position = [driver['position']]
    # @new_member.givenName = [driver['Driver']['givenName']]
    # @new_member.familyName = [driver['Driver']['familyName']]
    # @new_member.constructors = [driver['Constructors'][0]['name']]
    # @new_member.points = [driver['points']]
    @new_member.from_json(json)

    @members << @new_member

如果我取消注释控制器中的行并删除这些行

@new_member.from_json(json)
json = standings.to_json

我在视图中得到以下内容

姓名:[“刘易斯”]

姓名:["Nico"]

那个视图真的很接近但不是我需要的,我需要没有[“”]的数据, 所以我需要的视图是这样的:

1 刘易斯·汉密尔顿梅赛德斯 384

提前致谢。

【问题讨论】:

  • 小评论。您为我们提供了太多信息,无法帮助解决建议如何显示 json 的问题。试试 'awesome_print' gem
  • 对不起,我只是尽量说清楚。我能用那个宝石做什么?
  • 您基本上已经为我们提供了您的应用程序的转储。请尝试将问题缩小到具体问题。您似乎有多个问题:您在解析 JSON 时遇到问题吗?为视图组装数据?为数据设计视图?请限制您的问题并将您的代码精简到出现问题的最低限度。
  • 抱歉,我已经编辑了答案并尝试减少一点。我的问题是上面可以看到的错误。
  • json 变量中有什么内容?

标签: ruby-on-rails ruby json parsing


【解决方案1】:

备选方案 1

换行:

@new_member.givenName = [driver['Driver']['givenName']]

进入:

@new_member.givenName = driver['Driver']['givenName']

删除外部[],以便您正在填充的字段@new_member.givenName 变为字符串,而不是包含一个字符串的数组。

备选方案 2

是否有可能在循环遍历standings 哈希时,driver 临时变量是一个哈希?

在这种情况下,这样做可能就足够了:

@members = Array.new standings.each do |driver| @members << Member.new(driver) end

奖励:您可能不需要分配实例变量 @new_member,它会在循环的每次迭代中被覆盖

【讨论】:

  • 非常感谢您的解释。第一个工作完美。第二个给出错误。
猜你喜欢
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2016-08-28
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多