我在這裏做了一個概念驗證的事情,比我想的要麻煩一點。這是我想要做的以及我目前如何做的。我如何解析json並使用Sinatra和DataMapper將數據寫入數據庫
我發送我的Sinatra應用程序一個json文件,其中包含下面的簡單信息。
[
{
title: "A greeting!",
message: "Hello from the Chairman of the Board"
}
]
從那裏我有我使用採取PARAMS並將它們寫入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
當我送然而時間戳和ID保存到數據庫中的消息後標題和消息是零。
我錯過了什麼?
感謝
編輯:
現在,當我跑我的應用程序,並將其發送JSON文件中我得到這個錯誤:
C:/用戶/規範/紅寶石/ Ruby192/lib中/紅寶石/1.9.1/webrick/server.rb:183:in`block in start_thread' TypeError:無法將哈希轉換爲字符串
編輯2:一些成功。
我有一個文件調用test.json中的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
所以我越來越近。感謝所有幫助到目前爲止。與需要它像往常一樣
開始:
Greg感謝您對哈希和json的解釋。非常有幫助。 – Norm 2010-11-19 16:06:49
如果'params'是可以正常工作的JSON數據流。 – 2010-11-19 16:16:24
Arrgggg。我得到一個「不能轉換成字符串」的錯誤「我要去吃午餐了。 – Norm 2010-11-19 16:40:23