0
我有一個基本的Sinatra應用程序,它從PagerDuty接收一個webhook,抓取一些字段並在MongoDB中插入一個新文檔。通過JSON數組迭代 - Sinatra
post '/webhooks/pagerduty/' do
request.body.rewind
json = JSON.parse(request.body.read)
@pd_id = json["messages"][0]["data"]["incident"]["id"]
@ts = json["messages"][0]["data"]["incident"]["created_on"]
@status = json["messages"][0]["data"]["incident"]["status"]
@host = json["messages"][0]["data"]["incident"]["trigger_summary_data"]["HOSTNAME"]
@description = json["messages"][0]["data"]["incident"]["trigger_summary_data"]["SERVICEDESC"]
@state = json["messages"][0]["data"]["incident"]["trigger_summary_data"]["SERVICESTATE"]
# MongoDB connection code omitted
coll = db.collection('incidents')
_id = SecureRandom.hex
if @status != "resolved"
coll.insert({ :_id => _id, :pd_id => @pd_id, :ts => @ts, :status => @status, :host => @host, :description => @description, :state => @state, :db_type => @db_type })
else
coll.update({ :pd_id => @pd_id }, { "$set" => { :status => @status }})
end
status 200
end
這工作得很好,但問題是,有時PagerDuty發送陣列在多個JSON對象,我不知道如何調整代碼,並通過遍歷數組的數組中抓住了第一個對象,而不是一種乾的方式。
爲什麼不展示JSON的最小示例,這樣我們就可以看到你在說什麼,而不是讓我們想象它呢? – 2014-11-21 17:32:17
這只是一個JSON數組:{「messages」:[{「field」:「value」},{「field」:「value」}]} – kylemclaren 2014-11-22 22:05:32