私はここに概念証明の仕事をしていますが、私が思っていたよりも少し問題があります。ここに私がしたいことと、私が現在どのようにしているかがあります。jsonを解析し、SinatraとDataMapperを使用してそのデータをデータベースに書き込む方法
下記のシンプルなメッセージを含むjsonファイルをSinatraアプリに送信します。
[
{
title: "A greeting!",
message: "Hello from the Chairman of the Board"
}
]
私はのparamsを取ると私はタイムスタンプとIDがしかし、データベースに保存されているメッセージを送信するとSQLiteのデータベース
post '/note' do
data = JSON.parse(params) #<---EDIT - added, now gives error.
@note = Note.new :title => params[:title],
:message => params[:message],
:timestamp => (params[:timestamp] || Time.now)
@note.save
end
に書き込むために使用していますポストを持ってそこからタイトルとメッセージはゼロです。
私には何が欠けていますか?
おかげ
編集:私は私のアプリを実行し、それをJSONファイルを送信するとき
は今、私はこのエラーを取得する:
C:/ユーザー/ノーム/ルビー/ Ruby192/libに/ルビー/1.9.1/webrick/server.rb:183:in 'start_threadのブロック' TypeError:ハッシュを文字列に変換できません
編集2:いくつかの成功:
私はjsonが投稿される方法であるファイル呼び出しtest.jsonに上記のjsonを持っています。ファイルを投稿するためには、私はHTTPClientを使用:いくつかのより多くのそれについて考えた後
require 'httpclient'
HTTPClient.post 'http://localhost:4567/note', [ :file => File.new('.\test.json') ]
を、私は、ファイルはそう、私はそれを別の方法を送信しようとした問題だった投稿と思いました。だから私は近づいています
data = JSON.parse(request.body.read)
私の新しいsend.rb
require 'net/http'
require 'rubygems'
require 'json'
@host = 'localhost'
@port = '4567'
@post_ws = "/note"
@payload ={
"title" => "A greeting from...",
"message" => "... Sinatra!"
}.to_json
def post
req = Net::HTTP::Post.new(@post_ws, initheader = {'Content-Type' =>'application/json'})
#req.basic_auth @user, @pass
req.body = @payload
response = Net::HTTP.new(@host, @port).start {|http| http.request(req) }
puts "Response #{response.code} #{response.message}:
#{response.body}"
end
thepost = post
puts thepost
:以下の例では、私がこれまでのn私のポスト/ノートハンドルを変更し、一度働きました。これまでのすべての助けに感謝します。
ハッシュとjsonのあなたの説明のためにグレッグ感謝します。非常に役立ちます。 – Norm
'params'がうまく動作するJSONデータストリームである場合。 –
Arrgggg。 – Norm