Ruby on rails 使用RubyonRails将对象和嵌套对象映射到模型
我有一个像Ruby on rails 使用RubyonRails将对象和嵌套对象映射到模型,ruby-on-rails,json,activerecord,Ruby On Rails,Json,Activerecord,我有一个像 {"Result":[{ "Links":[{ "UrlTo":"http://www.example.com/", "Visited":1364927598, "FirstSeen":1352031217, "PrevVisited":1362627231, "Anchor":"example.com", "Type":"Text"
{"Result":[{
"Links":[{
"UrlTo":"http://www.example.com/",
"Visited":1364927598,
"FirstSeen":1352031217,
"PrevVisited":1362627231,
"Anchor":"example.com",
"Type":"Text",
"Flag":[],
"TextPre":"",
"TextPost":""
}],
"Index":0,
"Rating":0.001416,
"UrlFrom":"http://www.exampletwo.com",
"IpFrom":"112.213.89.105",
"Title":"Example title",
"LinksInternal":91,
"LinksExternal":51,
"Size":5735
}]}
我有一个带所有钥匙的模型
UrlTo、已访问、首次访问、已访问、锚定、类型、TextPre、TextPost、索引、评级、URLROM、IpFrom、标题、链接内部、链接外部、大小
我知道如何将其保存到数据库中,而不使用下面的内容
"Links":[{
"UrlTo":"http://example.com/",
"Visited":1364927598,
"FirstSeen":1352031217,
"PrevVisited":1362627231,
"Anchor":"example.com",
"Type":"Text",
"Flag":[],
"TextPre":"",
"TextPost":""
}],
也不知道如何将其与嵌套对象一起保存
我在谷歌上搜索过,所以什么也找不到,正确的方法是什么?我应该将嵌套对象移动到上面的对象中吗?我不需要嵌套它
提前感谢看起来您想要保存链接,因此我将循环提供的json中的结果/链接,并基于链接创建一个新的哈希 我在下面假装您的json在一个名为input.json的文件中,但您显然只需要解析文本或使用现有的json对象
require 'json'
json = JSON.parse File.read("input.json")
links = json["Result"].map do |result|
result["Links"].map {|link| link }
end.flatten
hash = {"Links" => links}
puts hash
这将创建对象:
{"Links"=>[{"UrlTo"=>"http://www.example.com/", "Visited"=>1364927598, "FirstSeen"=>1352031217, "PrevVisited"=>1362627231, "Anchor"=>"example.com", "Type"=>"Text", "Flag"=>[], "TextPre"=>"", "TextPost"=>""}]}
基于上面的json,可以向您发送多个链接(它是一个数组)。在这种情况下,您想做什么?json所来自的API出于某种原因从不提供多个链接,只提供多个结果我想要所有数据,所以最好像{“Result”:[{“UrlTo”:“,”“visted”:1364927598,“FirstSeen”:1352031217,“prevvisted”:1362627231,“Anchor”:“example.com”,“类型”:“文本”,“标志”:[],“TextPre”:“TextPost”:“索引”:0,“评级”:0.001416,“URLFORM”:“IpFrom”:“112.213.89.105”,“标题”:“示例标题”,“链接内部”:91,“链接外部”:51,“大小”:5735}]只需将数组移到上面的数组中即可?您需要将其展平为一个简单的散列,或者有两个对象(结果带有一个链接子对象),或者存储JSON而不是列。这完全取决于您希望如何存储数据。你应该从这里开始。@MaxRose Collins当然可以——如果你觉得我帮了你,请记下这是正确的答案。