我有一些关于在ruby中使用json文件的问题。
所以我的JSON文件包含以下信息:
{
"2018-12-11": {
"USD": 1.1379,
"JPY": 128.75,
"BGN": 1.9558,
"CZK": 25.845,
"DKK": 7.4641,
"GBP": 0.90228,
"HUF": 323.4,
"PLN": 4.2983,
"RON": 4.6557,
"SEK": 10.297,
"CHF": 1.1248,
"ISK": 140.2,
"NOK": 9.7038,
"HRK": 7.3943,
"RUB": 75.5225,
"TRY": 6.1295,
"AUD": 1.5778,
"BRL": 4.4417,
"CAD": 1.5239,
"CNY": 7.8498,
"HKD": 8.8934,
"IDR": 16625.0,
"ILS": 4.2691,
"INR": 81.8215,
"KRW": 1284.17,
"MXN": 23.0209,
"MYR": 4.7615,
"NZD": 1.6526,
"PHP": 60.009,
"SGD": 1.5617,
"THB": 37.317,
"ZAR": 16.2903
},
"2018-12-10": {
"USD": 1.1425,
"JPY": 128.79,
"BGN": 1.9558,
"CZK": 25.866,
"DKK": 7.4639,
"GBP": 0.90245,
"HUF": 323.15,
"PLN": 4.2921,
"RON": 4.6502,
"SEK": 10.333,
"CHF": 1.1295,
"ISK": 140.0,
"NOK": 9.6885,
"HRK": 7.387,
"RUB": 75.8985,
"TRY": 6.0499,
"AUD": 1.5842,
"BRL": 4.4524,
"CAD": 1.5218,
"CNY": 7.8967,
"HKD": 8.9283,
"IDR": 16671.36,
"ILS": 4.2642,
"INR": 82.7284,
"KRW": 1287.42,
"MXN": 23.132,
"MYR": 4.7671,
"NZD": 1.6581,
"PHP": 60.367,
"SGD": 1.5667,
"THB": 37.525,
"ZAR": 16.3463
}
我的json文件中还有很多日期。我尝试过
require 'json'
file = File.read('eurofxref-hist-90d.json')
Parse Data from File.data_hash = JSON.parse(file)
我收到错误
在文件<main>': undefined method
data_hash ='中rb:7:表示文件:类(NoMethodError)。
我对Ruby非常陌生,不知道我在做什么。基本上,我想从json文件中获取信息,因此我可以开发一种方法来以浮点数返回from_currency
上to_currency
和date
之间的汇率。
答案 0 :(得分:3)
您提供的代码很好:
require 'json'
file = File.read('eurofxref-hist-90d.json')
data_hash = JSON.parse(file)
数据问题,请在末尾添加右括号:
{ "2018-12-11": { "USD": 1.1379, "JPY": 128.75, "BGN": 1.9558, "CZK": 25.845, "DKK": 7.4641, "GBP": 0.90228, "HUF": 323.4, "PLN": 4.2983, "RON": 4.6557, "SEK": 10.297, "CHF": 1.1248, "ISK": 140.2, "NOK": 9.7038, "HRK": 7.3943, "RUB": 75.5225, "TRY": 6.1295, "AUD": 1.5778, "BRL": 4.4417, "CAD": 1.5239, "CNY": 7.8498, "HKD": 8.8934, "IDR": 16625.0, "ILS": 4.2691, "INR": 81.8215, "KRW": 1284.17, "MXN": 23.0209, "MYR": 4.7615, "NZD": 1.6526, "PHP": 60.009, "SGD": 1.5617, "THB": 37.317, "ZAR": 16.2903 }, "2018-12-10": { "USD": 1.1425, "JPY": 128.79, "BGN": 1.9558, "CZK": 25.866, "DKK": 7.4639, "GBP": 0.90245, "HUF": 323.15, "PLN": 4.2921, "RON": 4.6502, "SEK": 10.333, "CHF": 1.1295, "ISK": 140.0, "NOK": 9.6885, "HRK": 7.387, "RUB": 75.8985, "TRY": 6.0499, "AUD": 1.5842, "BRL": 4.4524, "CAD": 1.5218, "CNY": 7.8967, "HKD": 8.9283, "IDR": 16671.36, "ILS": 4.2642, "INR": 82.7284, "KRW": 1287.42, "MXN": 23.132, "MYR": 4.7671, "NZD": 1.6581, "PHP": 60.367, "SGD": 1.5667, "THB": 37.525, "ZAR": 16.3463 } }
答案 1 :(得分:1)
将其视为扩展注释而不是答案。 (请不要投票。)
您的JSON字符串实际上看起来像这样:
s=<<-END
{ "2018-12-11": { "USD": 1.1379, "JPY": 128.75, "BGN": 1.9558, "CZK": 25.845, "DKK": 7.4641, "GBP": 0.90228, "HUF": 323.4, "PLN": 4.2983, "RON": 4.6557, "SEK": 10.297, "CHF": 1.1248, "ISK": 140.2, "NOK": 9.7038, "HRK": 7.3943, "RUB": 75.5225, "TRY": 6.1295, "AUD": 1.5778, "BRL": 4.4417, "CAD": 1.5239, "CNY": 7.8498, "HKD": 8.8934, "IDR": 16625.0, "ILS": 4.2691, "INR": 81.8215, "KRW": 1284.17, "MXN": 23.0209, "MYR": 4.7615, "NZD": 1.6526, "PHP": 60.009, "SGD": 1.5617, "THB": 37.317, "ZAR": 16.2903 }, "2018-12-10": { "USD": 1.1425, "JPY": 128.79, "BGN": 1.9558, "CZK": 25.866, "DKK": 7.4639, "GBP": 0.90245, "HUF": 323.15, "PLN": 4.2921, "RON": 4.6502, "SEK": 10.333, "CHF": 1.1295, "ISK": 140.0, "NOK": 9.6885, "HRK": 7.387, "RUB": 75.8985, "TRY": 6.0499, "AUD": 1.5842, "BRL": 4.4524, "CAD": 1.5218, "CNY": 7.8967, "HKD": 8.9283, "IDR": 16671.36, "ILS": 4.2642, "INR": 82.7284, "KRW": 1287.42, "MXN": 23.132, "MYR": 4.7671, "NZD": 1.6581, "PHP": 60.367, "SGD": 1.5667, "THB": 37.525, "ZAR": 16.3463 } }
END
#=> " { \"2018-12-11\": { \"USD\": 1.1379, \"JPY\": 128.75, \"BGN\": 1.9558, \"CZK\": 25.845, \"DKK\": 7.4641, \"GBP\": 0.90228, \"HUF\": 323.4, \"PLN\": 4.2983, \"RON\": 4.6557, \"SEK\": 10.297, \"CHF\": 1.1248, \"ISK\": 140.2, \"NOK\": 9.7038, \"HRK\": 7.3943, \"RUB\": 75.5225, \"TRY\": 6.1295, \"AUD\": 1.5778, \"BRL\": 4.4417, \"CAD\": 1.5239, \"CNY\": 7.8498, \"HKD\": 8.8934, \"IDR\": 16625.0, \"ILS\": 4.2691, \"INR\": 81.8215, \"KRW\": 1284.17, \"MXN\": 23.0209, \"MYR\": 4.7615, \"NZD\": 1.6526, \"PHP\": 60.009, \"SGD\": 1.5617, \"THB\": 37.317, \"ZAR\": 16.2903 }, \"2018-12-10\": { \"USD\": 1.1425, \"JPY\": 128.79, \"BGN\": 1.9558, \"CZK\": 25.866, \"DKK\": 7.4639, \"GBP\": 0.90245, \"HUF\": 323.15, \"PLN\": 4.2921, \"RON\": 4.6502, \"SEK\": 10.333, \"CHF\": 1.1295, \"ISK\": 140.0, \"NOK\": 9.6885, \"HRK\": 7.387, \"RUB\": 75.8985, \"TRY\": 6.0499, \"AUD\": 1.5842, \"BRL\": 4.4524, \"CAD\": 1.5218, \"CNY\": 7.8967, \"HKD\": 8.9283, \"IDR\": 16671.36, \"ILS\": 4.2642, \"INR\": 82.7284, \"KRW\": 1287.42, \"MXN\": 23.132, \"MYR\": 4.7671, \"NZD\": 1.6581, \"PHP\": 60.367, \"SGD\": 1.5667, \"THB\": 37.525, \"ZAR\": 16.3463 } }\n"
让我们首先将该字符串写入文件。
FName = 'test'
File.write(FName, s)
#=> 1013 (number of characters written)
现在我们可以读取文件并将字符串转换为哈希:
require 'json'
JSON.parse(File.read(FName))
#=> {"2018-12-11"=>{"USD"=>1.1379, "JPY"=>128.75, "BGN"=>1.9558, "CZK"=>25.845,
# "DKK"=>7.4641, "GBP"=>0.90228, "HUF"=>323.4, "PLN"=>4.2983, "RON"=>4.6557,
# "SEK"=>10.297, "CHF"=>1.1248, "ISK"=>140.2, "NOK"=>9.7038, "HRK"=>7.3943,
# "RUB"=>75.5225, "TRY"=>6.1295, "AUD"=>1.5778, "BRL"=>4.4417, "CAD"=>1.5239,
# "CNY"=>7.8498, "HKD"=>8.8934, "IDR"=>16625.0, "ILS"=>4.2691, "INR"=>81.8215,
# "KRW"=>1284.17, "MXN"=>23.0209, "MYR"=>4.7615, "NZD"=>1.6526, "PHP"=>60.009,
# "SGD"=>1.5617, "THB"=>37.317, "ZAR"=>16.2903},
# "2018-12-10"=>{"USD"=>1.1425, "JPY"=>128.79, "BGN"=>1.9558, "CZK"=>25.866,
# "DKK"=>7.4639, "GBP"=>0.90245, "HUF"=>323.15, "PLN"=>4.2921, "RON"=>4.6502,
# "SEK"=>10.333, "CHF"=>1.1295, "ISK"=>140.0, "NOK"=>9.6885, "HRK"=>7.387,
# "RUB"=>75.8985, "TRY"=>6.0499, "AUD"=>1.5842, "BRL"=>4.4524, "CAD"=>1.5218,
# "CNY"=>7.8967, "HKD"=>8.9283, "IDR"=>16671.36, "ILS"=>4.2642, "INR"=>82.7284,
# "KRW"=>1287.42, "MXN"=>23.132, "MYR"=>4.7671, "NZD"=>1.6581, "PHP"=>60.367,
# "SGD"=>1.5667, "THB"=>37.525, "ZAR"=>16.3463}}
请注意
s=<<-END
...
END
是heredoc。这是构造包含引号的长字符串的便捷方法。