2017-01-26 22 views
0

私のサーバーからJSONハッシュを取得して、それを私のrubyスクリプトで読み込もうとしています。JSONはRubyの文字列をIntegerに暗黙的に変換しません。

私は、関数からこれを呼んでいる:

ここ
def get_functions(serial_number) 
    response = HTTParty.get("#{get_host_url}/v1/devices/#{serial_number}.json") 
    data = response['scan_option'] 
    return data 
end 

が返されるJSONです:それは、私はちょうど私の心を失うんだ場合を除き、しかし間違った値を返すしているようだ

{"can_scan"=>true, "can_brute_ssh"=>false, "can_brute_telnet"=>false, "can_brute_voip"=>false, "can_brute_smtp"=>false, "can_brute_pop3"=>false, "can_google_crawl"=>false, "can_scan_external_ip"=>false, "scan_ip_list"=>["10.10.10.1"], "exclude_ip_list"=>[]} 

data.each do |d| 
    @can_scan = d['can_scan'] 
    # .... 
end 

は、しかし、これはエラーを投げている:次のコードに読み込まれ

no implicit conversion of String into Integer

+1

地球上であなたはそのコードが動作するように期待するのはなぜ?あなたの質問のJSONはオブジェクト/ハッシュであり、反復処理が可能な配列ではありません。あなたが望むのは 'data [" scan_option "]。try(:[]、" can_scan ")'です。 – max

+0

申し訳ありませんが、Postmanからコピーしました...コードを実際のJSONをコンソールから取得して更新しました。 – Godzilla74

+0

まだハッシュです... – max

答えて

1
{foo: :bar}.each do |d| 
    p d 
    d['meow'] 
end 
    # => [:foo, :bar] 
    #! TypeError: no implicit conversion of String into Integer 

Hash#each 2個の素子アレイ([key, value])が得られます。配列はd["can_scan"]でインデックスを作成しようとします。配列は整数でしか索引付けできないため、失敗します。 data['can_scan'] -


代わりに、値を直接アクセスします。

+0

ありがとうございます! – Godzilla74

1

私は、あなたの3番目のスニペット(data.eachと呼ぶ場所)のdataは、ちょうどその上に記載されたハッシュであり、確かに面倒です。ハッシュ上のeachを呼び出すと、そのキーと値のペアを繰り返し処理し、ブロックのdata.each(それには[key, value]のペアがあります)の配列を与えます。

data['can_scan']に電話してください。

メソッドの末尾にあるreturnは、Rubyでは必要ないことに注意してください。あなただけ行うことができます。

def get_functions(serial_number) response = HTTParty.get("#{get_host_url}/v1/devices/#{serial_number}.json") response["scan_option"] end

+0

さらなる説明をありがとう。 – Godzilla74

関連する問題