【问题标题】:Rails process POST request with JSONRails 使用 JSON 处理 POST 请求
【发布时间】:2014-04-17 01:02:53
【问题描述】:

我的应用收到来自 HelloSign API 的带有事件数据的第三方 POST 回调。

问题是,我似乎无法“进入”json 来解析它并保存数据。

class HelloSignController < ApplicationController
  def receives_data
    j = params[:json]
    logger.info('THIS IS JSON:  ' + j)
    respond_to do |format|
      format.json { render json: "Hello API Event Received",
                           status: :ok }
    end
  end
end

从params[:json]收到的事件数据:

{
"event": {
    "event_type": "signature_request_sent",
    "event_time": "1394642012",
    "event_hash": "xxxxx"
},
"account_guid": null,
"client_id": "xxxx",
"signature_request": {
    "signature_request_id": "xxxxxxx",
    "title": "Review Agreement",
    "original_title": "Review Agreement",
    "message": null,
    "test_mode": true,
    "is_complete": false,
    "final_copy_uri": "/v3/signature_request/final_copy/xxxxx",
    "files_url": "https://api.hellosign.com/apiapp.php/v3/signature_request/files/xxxxx",
    "details_url": "https://www.hellosign.com/home/manage?locate=xxxxx",
    "requester_email_address": "xxxxxxx",
    "signatures": [
        {
            "signature_id": "xxxxx",
            "has_pin": false,
            "signer_email_address": "xxxx@gmail.com",
            "signer_name": "admin",
            "order": null,
            "status_code": "awaiting_signature",
            "signed_at": null,
            "last_viewed_at": null,
            "last_reminded_at": null
        }
    ]
}
}

例如,如何解析“j”以保存“event_type”和“signature_request_id”?

谢谢

另外:这是来自控制台的实际回调:

 Started POST "/hs_callback" for 127.0.0.1 at 2014-03-12 13:32:38 -0400
 Processing by HelloSignController#receives_data as */*
 Parameters: {"json"=>"{\"event\":{\"event_type\":\"signature_request_sent\",\"event_time\":\"1394645254\",\"event_hash\":\"xxxxx\",\"event_metadata\":{\"related_signature_id\":\"\",\"reported_for_account_id\":null,\"reported_for_app_id\":\"xxxxx\",\"event_message\":null}},\"account_guid\":null,\"client_id\":\"xxxxx\",\"signature_request\":{\"signature_request_id\":\"xxxx\",\"title\":\"Review Agreement\",\"original_title\":\"Review Agreement\",\"subject\":null,\"message\":null,\"test_mode\":true,\"is_complete\":false,\"has_error\":false,\"custom_fields\":[],\"response_data\":[],\"signing_url\":null,\"signing_redirect_url\":null,\"final_copy_uri\":\"\\/v3\\/signature_request\\/final_copy\\/xxxxxx\",\"files_url\":\"https:\\/\\/api.hellosign.com\\/apiapp.php\\/v3\\/signature_request\\/files\\/xxxxxxx\",\"details_url\":\"https:\\/\\/www.hellosign.com\\/home\\/manage?locate=xxxxxx\",\"requester_email_address\":\"xxxxx@maildrop.cc\",\"signatures\":[{\"signature_id\":\"xxxxx\",\"has_pin\":false,\"signer_email_address\":\"xxxxxx@gmail.com\",\"signer_name\":\"xxxxxxx\",\"order\":null,\"status_code\":\"awaiting_signature\",\"signed_at\":null,\"last_viewed_at\":null,\"last_reminded_at\":null}],\"cc_email_addresses\":[]}}"}

【问题讨论】:

    标签: ruby-on-rails ruby json post


    【解决方案1】:
    j = JSON.parse(params[:json])
    j['event']['event_type'] # => "signature_request_sent"
    j['signature_request']['signature_request_id'] # => "xxxxxxx"
    

    【讨论】:

      【解决方案2】:

      使用JSON.parse

      require 'json'
      
      #in your code 
      json_data = JSON.parse(params[:json])
      

      这将解析 json 数据并为其返回 hash,您可以进一步阅读以获取所有变量 POSTed。

      例如,要获取account_id,使用json_data["client_id"],要获取signature_id,使用json_data["signature_request"]["signatrues"][0]["signature_id"],等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-02
        • 2012-03-14
        • 1970-01-01
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多