[英]How to handle JSON response from Vimeo API when the video id that was requested doesn't match up to a resource
[英]How to handle large JSON data when exploring an API?
我經常發現自己開始探索新的API並獲取大型JSON對象。 而且每次我都在努力尋找一種方法來正確顯示它們的縮進時,以便我可以輕松地看到結構並確定與任務相關的部分。
現在,我正在探索用於Razberry(家庭自動化)的Z-Wave API。 我返回一個JSON,其中包含連接到家庭自動化網絡的所有設備。 看起來像這樣:
而且我不明白為什么Rails會打斷行列,以及為什么無法正確縮進JSON數據。 屏幕截圖上的輸出是此控制器代碼的結果:
request = Net::HTTP::Get.new(uri)
request.basic_auth 'admin', 'bla'
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(request)
end
@devices = JSON.parse(response.body)
render json: @devices
在探索數據結構時,看到現階段更有經驗的程序員如何處理JSON將很有趣。 如何顯示這種樣式的JSON ?:
{"1":
{"instances":
{"0":{
"commandClasses":
{"32":
{"name":"Basic",
"data":
{"invalidateTime":1462455293,
"updateTime":1462365990,
"type":"empty",
"value":null,
"supported":
{"invalidateTime":1462455293,
"updateTime":1462365990,
"type":"bool",
"value":true},
"version":
您可以使用JSON.pretty_generate()
方法:
例:
require 'json'
my_json = { :array => [1, 2, 3, { :sample => "hash"} ], :foo => "bar" }
puts JSON.pretty_generate(my_json)
輸出:
{
"array": [
1,
2,
3,
{
"sample": "hash"
}
],
"foo": "bar"
}
您的代碼:
request = Net::HTTP::Get.new(uri)
request.basic_auth 'admin', 'bla'
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(request)
end
@devices = JSON.parse(response.body)
render json: JSON.pretty_generate(@devices)
假設您願意將問題擴大到“我該怎么做才能使響應正文的輸出盡可能對人類友好?”,我還建議您使用Awesome Print。 要求'awesome_print'導致實例方法ai
(用於awesome inspect )被添加到Kernel
。 它可以采用各種參數,也可以根本不采用任何參數,例如在下面粘貼的irb會話中:
2.3.0 :030 > require 'awesome_print'
=> false
2.3.0 :031 > response_body.ai(html: true)
=> "<pre>{\n "array"<kbd style=\"color:slategray\"> => </kbd>[\n <kbd style=\"color:white\">[0] </kbd><kbd style=\"color:blue\">1</kbd>,\n <kbd style=\"color:white\">[1] </kbd><kbd style=\"color:blue\">2</kbd>,\n <kbd style=\"color:white\">[2] </kbd><kbd style=\"color:blue\">3</kbd>,\n <kbd style=\"color:white\">[3] </kbd>{\n "sample"<kbd style=\"color:slategray\"> => </kbd><kbd style=\"color:brown\">"hash"</kbd>\n }\n ],\n "foo"<kbd style=\"color:slategray\"> => </kbd><kbd style=\"color:brown\">"bar"</kbd>\n}</pre>"
2.3.0 :032 > puts response_body.ai
{
"array" => [
[0] 1,
[1] 2,
[2] 3,
[3] {
"sample" => "hash"
}
],
"foo" => "bar"
}
=> nil
在Ruby中,它很容易支持JSON,YAML和Awesome Print,因此我在代碼中提供了全部3種。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.