【发布时间】:2018-07-07 16:38:59
【问题描述】:
我从外部API 服务(我正在使用)获得这个外部JSON
{
"result": {
"2332860": {
"id": 2332860,
"name": "NAME 1",
"capping": {
"quantity": 1,
"frequency": 1440
},
"status": 0,
"price": 159,
"publisher_ad_types": []
},
"2335970": {
"id": 2335970,
"name": "NAME 2",
"capping": {
"quantity": 1,
"frequency": 1440
},
"status": 0,
"price": 159,
"publisher_ad_types": []
},
"2343470": {
"id": 2343470,
"name": "NAME 3",
"capping": {
"quantity": 1,
"frequency": 1440
},
"status": 0,
"price": 170,
"publisher_ad_types": []
}
},
"request_metadata": {
"limit": 50,
"offset": 0,
"count": 11
}
}
我通过在我的controller 中设置代码来得到这个输出:
api = HTTParty.get("https://api.external-service.com/v2/",headers: {"Authorization" => "api_token_hhs762jh97shakkaa"})
render :json => api
我想做的是能够在我的视图中显示每个块。
我怎样才能做到这一点?
感谢任何帮助或提示!
【问题讨论】:
-
我不确定我是否理解;你有一个 JSON 响应,为什么你不能只遍历地图并呈现你想要的任何 HTML?还是您想显示 JSON 本身(如代码块)?
-
你好@DaveNewton 我已经尝试过使用地图,但由于某种原因,我在我的视图中得到了未定义的地图方法。不知道我是否做错了什么:)
-
您很可能做到了,但由于我看不到您的屏幕,因此无法提供帮助。
-
@DaveNewton 感谢您的评论。对不起,我错了,我没有收到错误,但我在如何选择每个块和 call 块中的每个元素时遇到问题,例如
id、name等。在我看来,我做了@api.map do |line|%p=line,这个仍然向我展示了整个JSON代码,当我做%p=line['name']时我得到错误:没有将字符串隐式转换为整数。所以基本上我现在最大的问题是如何调用/选择每个块上的每个元素,如name、id等。谢谢你的帮助 -
这里有一些提示。 1) 在您的控制器或视图中放入
binding.pry(或您正在使用的任何内容)并查看数据以查看您拥有的内容。这是一张地图。第一个键是result。你想迭代它。 2)result也是一张地图。如果您在地图上迭代(您想要each,而不是map,顺便说一句,如果您不收集结果),您的块将采用|key, val|,例如ID,以及该键引用的对象。 3) 现在你有了每个结果的值,你可以像val['name']一样从中提取东西。 4) REPL 是你的朋友:使用它。
标签: json ruby-on-rails-4 view