在 Rails 中解析来自 CURL 的 Json 请求

Parse Json Request from CURL in Rails

我需要解析来自 curl request.Need 的 Json 数据以拆分 Mac、参数、数据类型、curl 请求下方的值,并将这些数据作为 set 方法的输入传递(对于每个 Mac 分开)。谁能指导如何拆分?

curl  -k -s -H  "Content-Type: application/json"   -d  '{"Data": {"Mac":"10.43.33.34","Parameter":"Device.wifi","datatype":"string","value":"5Ghz"},{"Mac":"15.23.43.48","Parameter":"Device.wifi","datatype":"string","value":"2.4GHZ"}}'  http://test:3000/api/executions_api_set/

设置API

  def show
       
        client = SetClient.new
        versionResponse = client.set_req(mac,parameter,datatype,value)
        if versionResponse.code == "200"
          value = JSON.parse(versionResponse.body)
          render json: {Mac: mac,Response:value}, status: :ok
        else
          render json: {Mac: mac,Parameter: parameter,status: 'Failed',responsecode:versionResponse.code}, status: :ok

        end

     end
    end
  end


end

更新代码

def create
        value = ''
        client = SetClient.new
        params["Data"].each do |mac_attributes|
          @mac_address, @Parameter, @dataType, @value = mac_attributes.values_at("Mac", "Parameter", "datatype", "value")
          @versionResponse = client.set_req_api(@mac_address,@Parameter,@dataType,@value)
          puts "versionResponse.status_code #{@versionResponse.code}"
       
         end
        if @versionResponse.code == "200"
          value = JSON.parse(@versionResponse.body)
          render json: {Mac_address: @mac_address,Response:value}, status: :ok
          else
          render json: {Mac_address: @mac_address,Parameter:@Parameter,status: 'Failed',responsecode:@versionResponse.code}, status: :ok
        end  
     
    end
  end
end    


我不完全确定您要做什么,但是如果您希望控制器为数组中的每个 JSON 对象调用一个方法,它看起来像:

def show
  params["Data"].each do |hash_of_mac_attributes|
    mac, parameter, datatype, value = hash_of_mac_attributes.values_at("Mac", "Parameter", "datatype", "value")
    method_you_want_to_call(mac, parameter, datatype, value)
  end

这是假设 rails 正确检测 JSON 正文并将其解析为您的参数散列。如果不是,那是一个可以解决的单独问题。

更新

为了 return 每次调用外部服务的结果,我们需要将每次调用存储在一个数组中,并在响应中呈现该数组。类似于以下内容:

def show
  json_array = params["Data"].map do |hash_of_mac_attributes|
    mac, parameter, datatype, value = hash_of_mac_attributes.values_at("Mac", "Parameter", "datatype", "value")
    response = client.set_req_api(mac, parameter, datatype, value)
    build_json_for_mac_lookup(response: response, mac: mac, parameter: parameter)
  end

  render json: json_array
end
def build_json_for_mac_lookup(arguments:, mac:, parameter:)
  json_body = {Mac_address: mac}
  if response.code == "200"
    json_body.merge(Response: JSON.parse(response.body))
  else
    json_body.merge(Parameter: parameter, status: 'Failed', responsecode: response.code)
  end
end