需要提交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字符串中只为一个数组实现一个循环。
到目前为止,我的代码用于测试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
答案 0 :(得分:3)
你的代码循环遍历一堆Daily对象(虽然你在循环中调用每一个'dailys'会令人困惑)。你没有真正解释你想做什么,但是如果你想使用你拥有的每日对象的一些属性制作一个json对象,你就可以这样做。
hash = Daily.find(:all, :limit => 12).map{|daily| {:foo => daily.bar, :chunky => daily.chicken}}.to_json
如果你从日常对象中提供你想要制作的json字符串的一些细节,那么我可以给你一些不那么愚蠢的代码,但方法是正确的:构建一个ruby数据结构然后用{{1将它转换为json }}
编辑:继续你的评论,我会这样做。
to_json
几个笔记:
1)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
是一个类,而不是一个对象(虽然类也是Ruby中的对象,我认为在rails中最好将它称为类。
2)通过Daily
我假设你的意思是最近保存的记录:这就是:order选项的用途。