2017-06-30 6 views
-3

のための入力を生成することは、私の入力文字列です:ルビー:私は入力文字列を渡すと、ターゲット変数に{}を得るが、私は、IPとパス<br> 以下は取得したいのですJSON

以下
target = {:state=>"running", :id=>"12", :ip=>"1.1.1.1"}.merge({:path => "path", :type => "target"}) 

は私のコードです:

class A 
    def initialize(argv) 
     target = JSON.parse(argv[0] || '{}', :symbolize_names => true) 
     @address = target[:ip] 
     @path = target[:path] 
    end 
end 

助けてください!

+1

あなたが提供した例で何がうまくいかないのかは私にはっきり分かりません。良い質問をする方法を見直して、もう一度やり直してください – Hamms

+2

「A.new」と呼ぶ場所にコード行を含めることができますか? – eiko

+0

同意します。この例では 'target'の定義はまったく異なります。 targetが 'argv [0]'として渡されたマージされたハッシュであれば 'JSON.parse()'は必要なく、あなたのコードは 'argv [0] [:ip]'として動作します。そうでなければ、我々は 'argv [0]'が – whodini9

答えて

1

だから、JSON.parse()には最初の引数の文字列、完全な文字列が必要です。 を実行すると、文字列の最初の要素を取得しているだけなので、機能しません。 JSON.parse()は有効であるが使用できない文字列が入力された場合に空のハッシュを返す場合があります。その場合、文字は単なる文字なので、target{}です。

私は、argv[0]argvに変更し、有効なJSON文字列のみを提供すると思います。

EDIT:ハッシュを渡していると思いますが、JSON.parse()はハッシュではない文字列を受け入れます。特に、は存在しないキー値のペアを指しています最初の入力ハッシュには0のキーがないためです。

関連する問題