我正在寻找一种简单的方法来解析JSON,提取值并将其写入Rails中的数据库。
具体来说,我正在寻找的是一种方法,从从位返回的JSON中提取shortUrl。ly API:
{
"errorCode": 0,
"errorMessage": "",
"results":
{
"http://www.foo.com":
{
"hash": "e5TEd",
"shortKeywordUrl": "",
"shortUrl": "http://bit.ly/1a0p8G",
"userHash": "1a0p8G"
}
},
"statusCode": "OK"
}
然后把那个短URL写进一个与长URL相关的ActiveRecord对象。
这是我可以完全从概念上思考的事情之一,当我坐下来执行时,我意识到我有很多东西要学习。
这可以如下所示,只需要使用JSON。解析,然后您可以通过索引正常遍历它。
#ideally not really needed, but in case if JSON.parse is not identifiable in your module
require 'json'
#Assuming data from bitly api is stored in json_data here
json_data = '{
"errorCode": 0,
"errorMessage": "",
"results":
{
"http://www.foo.com":
{
"hash": "e5TEd",
"shortKeywordUrl": "",
"shortUrl": "http://whateverurl",
"userHash": "1a0p8G"
}
},
"statusCode": "OK"
}'
final_data = JSON.parse(json_data)
puts final_data["results"]["http://www.foo.com"]["shortUrl"]
以下是2013年的最新情况。
Ruby
Ruby 1.9有一个默认的带有C扩展的JSON gem。你可以用它
require 'json'
JSON.parse ''{ "x": "y" }'
# => {"x"=>"y"}
解析!变体可以用于安全的来源。还有其他宝石,它们可能比默认实现更快。请参考multi_json的列表。
Rails
现代版本的Rails使用multi_json,这是一个自动使用最快的JSON gem的gem。因此,推荐的方法是使用
object = ActiveSupport::JSON.decode json_string
有关更多信息,请参考ActiveSupport::JSON。特别地,方法源中的重要行是
data = MultiJson.load(json, options)
然后在您的Gemfile中,包含您想要使用的宝石。例如,
group :production do
gem 'oj'
end