簡體   English   中英

Ruby String轉換為格式化的JSON

[英]Ruby String to formatted JSON

我已經從Nokogiri的頁面中刪除了部分數據。

require 'net/http'
require 'nokogiri'
require 'open-uri'
require 'json'

sources = {
   cb: "http://www.cbbankmm.com/fxratesho.php",
}

puts "Currencies from CB Bank are"
if @page = Nokogiri::HTML(open(sources[:cb]))
    (1..3).each do |i|
        puts @page.css("tr")[i].text.gsub(/\s+/,'')
    end
end

結果是

Currencies from CB Bank are
USD873883
SGD706715
EURO11241135

我想將輸出格式化為以下JSON格式

{
    "bank":"CB",
    "rates": {
        "USD":"[873,883]",
        "SGD":"[706,715]",
        "EURO":"[1124,1135]"
    }
}

我必須使用哪種寶石,方法來獲得上述哈希或JSON格式?

一些抽象可能是一個想法。 因此,也許有一個課程可以幫助您完成工作:

class Currencies

  def initialize(page, bank)
    @page = page
    @bank = bank
  end

  def parsed
    @parsed ||= @page.css("tr").collect{ |el| el.text.gsub(/\s+/,'') }
  end


  def to_hash
    {
      bank: @bank,
      rates: {
        USD: usd,
        SGD: sgd,
        .... 
      }
    }
  end

  def usd
    parsed[0].gsub(/^USD/, '')
  end

  def sgd
    parsed[1].gsub(/^SGD/, '')
  end

  ...

end

這樣使用

Currencies.new(Nokogiri::HTML(open(sources[:cb])), "CB").to_hash.to_json

只需在Ruby中創建等效的哈希結構,然后執行例如

hash = {
    "bank" => "CB",
    "rates" => {
        "USD" => "[873,883]",
        "SGD" => "[706,715]",
        "EURO" => "[1124,1135]"
    }
}

hash.to_json

您已經包含了json gem。 顯然,您在當前具有puts語句的地方構建了Ruby哈希。

編輯:如果布局對您很重要,則您可能希望:

JSON.pretty_generate( hash )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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