Ruby on rails 在循环中附加到JSON数组
需要提交json字符串的HTTP POST请求。 让所有RESTful部件正常工作,并正确验证。 如果我对数组中的元素进行硬编码,这是可行的。我想循环使用JSON字符串中的一个数组,即“附件数组” 循环看起来像:Ruby on rails 在循环中附加到JSON数组,ruby-on-rails,ruby,arrays,json,rest,Ruby On Rails,Ruby,Arrays,Json,Rest,需要提交json字符串的HTTP POST请求。 让所有RESTful部件正常工作,并正确验证。 如果我对数组中的元素进行硬编码,这是可行的。我想循环使用JSON字符串中的一个数组,即“附件数组” 循环看起来像: @days = Daily.all @days[0..11] do |dailys| #loop that builds json to post end #RESTful HTTP POST request 唯一的问题是,我不知道如何在JSON字符串中只为一个数组实现循环
@days = Daily.all
@days[0..11] do |dailys|
#loop that builds json to post
end
#RESTful HTTP POST request
唯一的问题是,我不知道如何在JSON字符串中只为一个数组实现循环
到目前为止,我的代码用于测试HTTP POST
#!/usr/bin/ruby
require 'net/http'
require 'uri'
require 'json'
require 'jbuilder'
uri = URI.parse("<POST URL>")
header = {'Content-Type' => 'text/json'}
payload = {
channel: "<channel>",
username: "<username>",
# Wish to loop through the "Attachments" Array
attachments: [
{
param: "Text",
text: "Text",
pretext: "Optional Text",
color: 'good',
fields: [
{
Title: "Title field",
value: "First Value",
short: false
},
{
title: "Field Title",
value: "Field Value",
short: true
},
{
title: "Second Field Title",
value: "Second Field Value",
short: true
}
]
}
]
}
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri.request_uri, header)
req.body = payload.to_json
resp = http.request(req)
puts resp
#/usr/bin/ruby
需要“net/http”
需要“uri”
需要“json”
需要“jbuilder”
uri=uri.parse(“”)
header={'Content-Type'=>'text/json'}
有效载荷={
频道:“,
用户名:“”,
#希望在“附件”数组中循环
附件:[
{
参数:“文本”,
文本:“文本”,
借口:“可选文本”,
颜色:“好”,
字段:[
{
标题:“标题字段”,
值:“第一个值”,
短:错
},
{
标题:“字段标题”,
值:“字段值”,
短:对
},
{
标题:“第二个字段标题”,
值:“第二个字段值”,
短:对
}
]
}
]
}
http=Net::http.new(uri.host,uri.port)
http.use_ssl=true
req=Net::HTTP::Post.new(uri.request\u uri,头)
req.body=payload.to_json
resp=http.request(请求)
放置resp
你的代码在一堆日常对象中循环(尽管你在循环中把每一个对象都称为“dailys”,这令人困惑)。您并没有真正解释您想要做什么,但是如果您想要使用日常对象的一些属性创建一个json对象,您可以这样做
hash = Daily.find(:all, :limit => 12).map{|daily| {:foo => daily.bar, :chunky => daily.chicken}}.to_json
如果您提供了一些您希望从日常对象生成的json字符串的详细信息,那么我可以给您一些不那么愚蠢的代码,但方法是正确的:构建一个ruby数据结构,然后使用将其转换为json,并将其转换为\u json
编辑:根据你的评论,我会这样做
hash = Daily.find(:all, :limit => 12, :order => "id desc").map{|daily| {param: daily.title, fields: [{title: "Task Completed?", value: daily.completed, short: true}]} }
json = hash.to_json
几点注意:
1) Daily
是一个类,而不是对象(虽然在Ruby中类也是对象,但我认为在rails中最好将其称为类。2) 通过
最后12个元素
我假定您指的是最近保存的记录:这就是:order选项的作用 谢谢你的建议。我希望做的是循环浏览每日对象的最后12个元素。然后使用来自Daily对象的数据填充“Attachments”数组。So->附件:[{param:{dailies.title],字段:[{title:“任务完成?”,值:{daily.Completed},short:true}]}]