Ruby on rails 访问深度嵌套数组中的值-Ruby on Rails
我正在使用一个返回JSON响应的API调用。我想访问响应中的数据,以便创建一些漂亮的显示卡,显示信息和图片。下面是响应的一个片段,响应属性中填充了大约20个对象。为了简洁起见,我将只包括两个对象:Ruby on rails 访问深度嵌套数组中的值-Ruby on Rails,ruby-on-rails,arrays,json,ruby,rails-api,Ruby On Rails,Arrays,Json,Ruby,Rails Api,我正在使用一个返回JSON响应的API调用。我想访问响应中的数据,以便创建一些漂亮的显示卡,显示信息和图片。下面是响应的一个片段,响应属性中填充了大约20个对象。为了简洁起见,我将只包括两个对象: { "success": true, "message": "", "result": [ { "MarketCurrency": "LTC", "BaseCurrency": "BTC",
{
"success": true,
"message": "",
"result": [
{
"MarketCurrency": "LTC",
"BaseCurrency": "BTC",
"MarketCurrencyLong": "Litecoin",
"BaseCurrencyLong": "Bitcoin",
"MinTradeSize": 1e-8,
"MarketName": "BTC-LTC",
"IsActive": true,
"Created": "2014-02-13T00:00:00",
"Notice": null,
"IsSponsored": null,
"LogoUrl": "https://i.imgur.com/R29q3dD.png"
},
{
"MarketCurrency": "DOGE",
"BaseCurrency": "BTC",
"MarketCurrencyLong": "Dogecoin",
"BaseCurrencyLong": "Bitcoin",
"MinTradeSize": 1e-8,
"MarketName": "BTC-DOGE",
"IsActive": true,
"Created": "2014-02-13T00:00:00",
"Notice": null,
"IsSponsored": null,
"LogoUrl": "https://i.imgur.com/e1RS4Hn.png"
},
在我的Rails控制器中,我使用JSON.parse,并尝试将其转换为具有Open struct选项的对象:
@markets = JSON.parse(markets.to_json, object_class: OpenStruct)
在我看来,我将这样做
,它显示数组而不是对象。所以我尝试了这个
,它显示了1。如果我这样做,我希望它返回true,但它返回success。所以,我不明白为什么ostruct库不能像我期望的那样工作,也不明白如何访问结果数组中存储的对象。非常感谢您的帮助 您已经有了一个JSON响应,不需要再次使用来\u JSON
,尝试只解析该对象,然后使用点
作为OpenStruct对象访问其字段,现在您可以作为方法访问它们:
require 'json'
a = '{
"success": true,
"message": "",
"result": [{
"MarketCurrency": "LTC",
"BaseCurrency": "BTC",
"MarketCurrencyLong": "Litecoin",
"BaseCurrencyLong": "Bitcoin",
"MinTradeSize": 1e-8,
"MarketName": "BTC-LTC",
"IsActive": true,
"Created": "2014-02-13T00:00:00",
"Notice": null,
"IsSponsored": null,
"LogoUrl": "https://i.imgur.com/R29q3dD.png"
}, {
"MarketCurrency": "DOGE",
"BaseCurrency": "BTC",
"MarketCurrencyLong": "Dogecoin",
"BaseCurrencyLong": "Bitcoin",
"MinTradeSize": 1e-8,
"MarketName": "BTC-DOGE",
"IsActive": true,
"Created": "2014-02-13T00:00:00",
"Notice": null,
"IsSponsored": null,
"LogoUrl": "https://i.imgur.com/e1RS4Hn.png"
}]
}'
b = JSON.parse(a, object_class: OpenStruct)
p b.success
# => true
您已经有了一个JSON响应,无需再次使用
来_JSON
,尝试解析该对象,然后使用点
作为OpenStruct对象访问其字段,现在您可以作为方法访问它们:
require 'json'
a = '{
"success": true,
"message": "",
"result": [{
"MarketCurrency": "LTC",
"BaseCurrency": "BTC",
"MarketCurrencyLong": "Litecoin",
"BaseCurrencyLong": "Bitcoin",
"MinTradeSize": 1e-8,
"MarketName": "BTC-LTC",
"IsActive": true,
"Created": "2014-02-13T00:00:00",
"Notice": null,
"IsSponsored": null,
"LogoUrl": "https://i.imgur.com/R29q3dD.png"
}, {
"MarketCurrency": "DOGE",
"BaseCurrency": "BTC",
"MarketCurrencyLong": "Dogecoin",
"BaseCurrencyLong": "Bitcoin",
"MinTradeSize": 1e-8,
"MarketName": "BTC-DOGE",
"IsActive": true,
"Created": "2014-02-13T00:00:00",
"Notice": null,
"IsSponsored": null,
"LogoUrl": "https://i.imgur.com/e1RS4Hn.png"
}]
}'
b = JSON.parse(a, object_class: OpenStruct)
p b.success
# => true
经过大量的调试和帮助,我能够让它工作。API调用的响应是一个包含一个项的数组。该项是整个数据集的一个长字符串 为了在呼叫@markets.success时获得预期的“true”行为,我首先必须
raw_markets = JSON.parse(markets.to_json)
接
@markets = raw_markets.map do |market|
JSON.parse(market, object_class: OpenStruct)
注:变量markets保存原始api调用:
markets = open('url-to-api')
在此之后,我将获得@markets.success=“true”和@markets.result[0]获得第一个结果,@markets.result[1]获得第二个结果,依此类推。经过大量调试和一些帮助,我能够让它工作。API调用的响应是一个包含一个项的数组。该项是整个数据集的一个长字符串 为了在呼叫@markets.success时获得预期的“true”行为,我首先必须
raw_markets = JSON.parse(markets.to_json)
接
@markets = raw_markets.map do |market|
JSON.parse(market, object_class: OpenStruct)
注:变量markets保存原始api调用:
markets = open('url-to-api')
在这之后,我会得到@markets.success=“true”和@markets.result[0]保存第一个结果,@markets.result[1]保存第二个结果,依此类推。如果我删除。对于_json,我会得到这个错误,“没有将Tempfile隐式转换为字符串”。你能说明你请求获取数据的方式吗?如果我删除。对于_json,我会得到这个错误,“没有将Tempfile隐式转换为字符串”。您能说明您请求获取该数据的方式吗?