【发布时间】:2021-10-19 10:22:21
【问题描述】:
我需要从 curl 请求中解析 Json 数据。需要从下面的 curl 请求中拆分 Mac、参数、数据类型、值,并将这些数据作为 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
【问题讨论】:
-
不确定我是否理解您的问题。我相信您的 CURL 请求的 JSON 内容格式不正确,您需要将 mac 地址 JSON 对象列表包装在一个数组中。像
{"Data": [{"Mac":"..."},{}]}这样的东西。然后,Rails 将解析 JSON 正文内容,并为您提供包含 JSON 对象中键和值的哈希数组。例如params["Data"]是对象数组,params["Data"].map{|mac_object| mac_object["Mac"]}是 MAC 地址数组。
标签: ruby-on-rails ruby-on-rails-4