2013-01-11 53 views
2

基本的疑問,我卡上:解析JSON Rails中

如果我收到以下JSON的POST請求:

JSON: { 
    "type": "invoice.payment_succeeded", 
    "pending_webhooks": 0, 
    "created": 1357936579, 
    "object": "event", 
    "livemode": false, 
    "id": "evt_15PLdo9JdZ2yN4", 
    "data": { 
    "object": { 
     "subtotal": 3500, 
     "attempted": true, 
     "paid": true, 
     "amount_due": 3500, 
     "closed": true, 
     "period_end": 1357936578, 
     "lines": { 
     "url": "/v1/invoices/in_15PLg6oL0IiYYj/lines", 
     "count": 1, 
     "object": "list", 
     "data": [ 
      { 
      "type": "subscription", 
      "period": { 
       "end": 1360614978, 
       "start": 1357936578 
      }, 
      "livemode": false, 
      "object": "line_item", 
      "proration": false, 
      "amount": 3500, 
      "quantity": 1, 
      "plan": { 
       "interval_count": 1, 
       "livemode": false, 
       "object": "plan", 
       "amount": 3500, 
       "trial_period_days": null, 
       "name": "forecast3", 
       "currency": "usd", 
       "id": "forecast3", 
       "interval": "month" 
      }, 
      "id": "su_15PLVebFWecrdQ", 
      "currency": "usd", 
      "description": null 
      } 
     ] 
     }, 
     "starting_balance": 0, 
     "charge": "ch_15PLYLUiVusQDH", 
     "object": "invoice", 
     "total": 3500, 
     "ending_balance": 0, 
     "date": 1357936578, 
     "period_start": 1357936087, 
     "attempt_count": 0, 
     "discount": null, 
     "livemode": false, 
     "id": "in_15PLg6oL0IiYYj", 
     "next_payment_attempt": null, 
     "customer": "cus_15OrEWGsLN3CkP", 
     "currency": "usd" 
    } 
    } 
} 

如何解析訪問paramater "id": "in_15PLg6oL0IiYYj"

謝謝!

注意:這是來自通過條紋支付處理的webhook。

我已經試過這有一些變化,但似乎兜兜:

# Parse JSON 
event_data = JSON.parse(json) 

# Get Invoice id 
invoice_id = Stripe::Invoice.retrieve(event_data.data.object.id) 
+0

更新是可訪問的,包括我一直在努力的 – nathan

+0

可能重複(HTTP [如何解析JSON與Ruby on Rails的?]://計算器.COM /問題/ 1826727 /怎麼辦-I-解析JSON的與 - 的Ruby-on-軌) – Justin

回答

0

如果您在params哈希表接收數據,則:

logger.debug params["id"] 

應該工作。

9

而不是event_data.data.object.id

你應該嘗試:

event_data["data"]["object"]["id"] 
0

也就是說RAW POST數據,不是URL參數

您可以交叉檢查,如果你是在http://requestb.in/

獲取原始數據

原始數據將無法使用params ['id']訪問,因爲它沒有一個關鍵

你想要的數據通過

request.env["rack.input"].read