2017-04-15 14 views
0

入力を受け取る関数を作成しようとしています。この場合はトラッキングコードです。その追跡コードをJSONファイルで確認し、トラッキングコードを出力として返します。私はこの機能を使用して開始しているルビーのjsonファイルのフィールドと入力を比較します

[ 
    { 
    "tracking_number": "IN175417577", 
    "status": "IN_TRANSIT", 
    "address": "237 Pentonville Road, N1 9NG" 
    }, 
    { 
    "tracking_number": "IN175417578", 
    "status": "NOT_DISPATCHED", 
    "address": "Holly House, Dale Road, Coalbrookdale, TF8 7DT" 
    }, 
    { 
    "tracking_number": "IN175417579", 
    "status": "DELIVERED", 
    "address": "Number 10 Downing Street, London, SW1A 2AA" 
    } 
] 

:JSONファイルは、以下のようである私は、JSONファイルへの入力を比較する方法を

def compare_content(tracking_number) 
    File.open("pages/tracking_number.json", "r") do |file| 
    file.print() 
end 

わかりません。どんな助けでも大歓迎です。

答えて

1

use the built-in JSON moduleとすることができます。

require 'json' 

def compare_content(tracking_number) 
    # Loads ENTIRE file into string. Will not be effective on very large files 
    json_string = File.read("pages/tracking_number.json") 

    # Uses the JSON module to create an array from the JSON string 
    array_from_json = JSON.parse(json_string) 

    # Iterates through the array of hashes 
    array_from_json.each do |tracking_hash| 
    if tracking_number == tracking_hash["tracking_number"] 
     # If this code runs, tracking_hash has the data for the number you are looking up 
    end 
    end 
end 

これは、あなたが、あなたが見上げている数と比較することができますハッシュの配列内に供給されたJSONをパースします。

JSONファイルを生成するユーザーがこのメソッドを多く呼び出す場合は、このメソッドのトラッキング番号をデータに直接マッピングして、より高速に実行することを検討してください。たとえば、ハッシュに解析します

{ 
    "IN175417577": { 
    "status": "IN_TRANSIT", 
    "address": "237 Pentonville Road, N1 9NG" 
    }, 
    "IN175417578": { 
    "status": "NOT_DISPATCHED", 
    "address": "Holly House, Dale Road, Coalbrookdale, TF8 7DT" 
    }, 
    "IN175417579": { 
    "status": "DELIVERED", 
    "address": "Number 10 Downing Street, London, SW1A 2AA" 
    } 
} 

は、どこがはるかに簡単にデータをつかむことができます:そのため

require 'json' 

def compare_content(tracking_number) 
    json_string = File.read("pages/tracking_number.json") 

    hash_from_json = JSON.parse(json_string) 

    if hash_from_json.key?(tracking_number) 
    tracking_hash = hash_from_json[tracking_number] 
    else 
    # Tracking number does not exist 
    end 
end 
+0

乾杯アンドリュー感謝を。 – AltBrian

関連する問題