在 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
我需要解析来自 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