2016-08-31 10 views
-2

初心者にはルビーを使って、jsonファイルを繰り返して解析することを学ぶ。任意の学習の言及は非常に参考になるルビーを使ってjsonを構文解析して反復する方法

http://www.example.com/path/to/file#header2 
https://www.stack.org/some/path?key1=val1&key2=val2 

:input.json

[ 
{ 
     "scheme": "http", 
     "domain_name": "www.example.com", 
     "path": "path/to/file", 
     "fragment": "header2" 
    }, 
    { 
     "scheme": "http", 
     "domain_name": "www.example2.org", 
     "disabled": true 
    }, 
    { 
     "scheme": "https", 
     "domain_name": "www.stack.org", 
     "path": "some/path", 
     "query": { 
      "key1": "val1", 
      "key2": "val2" 
     } 
    } 
] 

HO内部の内容は、私がように、出力を印刷し解析します。

答えて

2

うまくいけば、このコードは自明である:

require 'URI' 
require 'json' 

entries = JSON.parse(File.read('input.json')) 
entries.reject { |entry| entry["disabled"] }.each do |entry| 
    puts URI::Generic.build({ 
    :scheme => entry["scheme"], 
    :host => entry["domain_name"], 
    :fragment => entry["fragment"], 
    :query => entry["query"] && URI.encode_www_form(entry["query"]), 
    :path => entry["path"] && ("/" + entry["path"]) 
    }).to_s 
end 

# Output: 
# http://www.example.com/path/to/file#header2 
# https://www.stack.org/some/path?key1=val1&key2=val2 
1

最初のステップは、RubyのデータにこのJSONを有効にすることです:

require 'json' 

data = JSON.load(DATA) 

その後、あなたはこのを反復処理する必要があり、そのすべてのそれらを拒否

data.reject do |entry| 
    entry['disabled'] 
end 

thを活用する操作と連鎖できるものはどれですか。

def normalized_path(path) 
    case (path and path[0,1]) 
    when nil 
    '/' 
    when '/' 
    path 
    else 
    "/#{path}" 
    end 
end 
:これは normalized_pathと呼ばれる機能が nilまたは無効なパスに対処し、それらを修正する必要が

require 'uri' 

uris = data.reject do |entry| 
    entry['disabled'] 
end.map do |entry| 
    case (entry['scheme']) 
    when 'https' 
    URI::HTTPS 
    else 
    URI::HTTP 
    end.build(
    host: entry['domain_name'], 
    path: normalized_path(entry['path']), 
    query: entry['query'] && URI.encode_www_form(entry['query']) 
).to_s 
end 

#=> ["http://www.example.com/path/to/file", "http://www.stack.org/some/path?key1=val1&key2=val2"] 

:電子URIライブラリには、あなたの出力を構築します

関連する問題