我正在寻找一种简单的方法来解析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对象。
这是我可以完全从概念上思考的事情之一,当我坐下来执行时,我意识到我有很多东西要学习。
Ruby捆绑的JSON能够单独展示一些魔力。
如果你有一个包含JSON序列化数据的字符串,你想要解析:
JSON[string_to_parse]
JSON会查看参数,看到它是一个字符串,并尝试解码它。
类似地,如果你有一个想要序列化的哈希或数组,使用:
JSON[array_of_values]
Or:
JSON[hash_of_values]
JSON会序列化它。如果您想避免[]方法的视觉相似性,也可以使用to_json方法。
下面是一些例子:
hash_of_values = {'foo' => 1, 'bar' => 2}
array_of_values = [hash_of_values]
JSON[hash_of_values]
# => "{\"foo\":1,\"bar\":2}"
JSON[array_of_values]
# => "[{\"foo\":1,\"bar\":2}]"
string_to_parse = array_of_values.to_json
JSON[string_to_parse]
# => [{"foo"=>1, "bar"=>2}]
如果你在JSON中查找,你可能会注意到它是YAML的一个子集,实际上YAML解析器是处理JSON的。你也可以这样做:
require 'yaml'
YAML.load(string_to_parse)
# => [{"foo"=>1, "bar"=>2}]
如果你的应用程序同时解析YAML和JSON,你可以让YAML处理这两种类型的序列化数据。
这可以如下所示,只需要使用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"]