簡體   English   中英

探索API時如何處理大型JSON數據?

[英]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    &quot;array&quot;<kbd style=\"color:slategray\"> =&gt; </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            &quot;sample&quot;<kbd style=\"color:slategray\"> =&gt; </kbd><kbd style=\"color:brown\">&quot;hash&quot;</kbd>\n        }\n    ],\n      &quot;foo&quot;<kbd style=\"color:slategray\"> =&gt; </kbd><kbd style=\"color:brown\">&quot;bar&quot;</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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM