gpt4 book ai didi

ruby - 使用 grape API 将复杂的 JSON 发布到 PostgreSQL

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:51 25 4
gpt4 key购买 nike

我正在尝试使用 grape 创建一个 API ,它在发布时将 JSON 数据保存到 PostgreSQL。这是示例 JSON:

{
"about": "this is about me",
"company_name": "David Co",
"company_url": "http://google.com",
"created_at": "2013-02-03T13:09:37+05:30",
"email": "jones@david.com",
"first_name": "David",
"google_plus": "http://google.com",
"id": 1
}

这是 Ruby 代码:

class Posts < Grape::API

version 'v1', :using => :path
format :json

resource 'posts' do
get "/" do
Post.all
end

get "/:id" do
Post.find(params['id'])
end

post "/create" do
Post.create(params['post'])
end
end

end

我正在关注这个 sample ,它适用于上述 JSON。

如何修改代码以使其适用于更复杂的 JSON,例如:

{
"about": "this is about me",
"company_name": "David Co",
"company_url": "http://google.com",
"created_at": "2013-02-03T13:09:37+05:30",
"email": "jones@david.com",
"first_name": "David",
"google_plus": "http://google.com",
"id": 1,
"chall": [{
"attributes": {
"type": "tegory__c",
"url": "/services0/sobjects/__c/a08Z0000000RmoTIAS"
}
}

这是当前的数据库模式:

create_table :posts do |t|
t.string :first_name
t.string :email
t.string :company_name
t.string :google_plus
t.string :about
t.string :company_url
t.timestamps
end

最佳答案

您的属性 将是一个单独的表,包括类型和 url。然后您的 chall 将成为一个链接表,从单个 posts 行映射到多个 attributes 行。这允许您将这种格式的数据放入数据库。

当然,attributes 只有一个条目,很难提供完整的架构,但这应该让您了解如何将它们放在一起。

请注意,如果您愿意,如果您的 JSON 看起来像这样,您可以简化事情:

"chall": [{
"type": "tegory__c",
"url": "/services0/sobjects/__c/a08Z0000000RmoTIAS"
}]

因为 chall 将是与 posts 的直接一对多链接,尽管由于缺乏数据,再次很难判断这是否有效在示例 JSON 中。不过,希望这能为您指明正确的方向。

如果我假设是前者,那么您的架构如下所示:

create_table :posts do |t|
t.string :first_name
t.string :email
t.string :company_name
t.string :google_plus
t.string :about
t.string :company_url
t.timestamps
end

create_table : attributes do |t|
t.string :type
t.string :url
end

create_table post_attributes do |t|
t.references : posts
t.references : attributes
end

在这种情况下,帖子和属性之间存在多对多关系。

关于ruby - 使用 grape API 将复杂的 JSON 发布到 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com