値が空白の時でもエラーが出ないようにしたい


jsonでgetpositionsの"size"の値を取り出して認識させたいのですが、そのgetpositionsの値が空白の時エラーになってしまって、プログラムが止まってしまします。  
値が空白の時は0にしてエラーを回避するプログラムを書きたいのですがうまくいきません。。どうかよろしくお願いします。

[code]

    require "net/http"
    require "uri"
    require "openssl"
    require "json"
    
    key = "kkkkkkkk"
    secret = "kkkkkkkkk"
    
    timestamp = Time.now.to_i.to_s
    method = "GET"
    uri = URI.parse("kkkkkkkkkkkk")
    uri.path = "/v1/me/getpositions"
    uri.query = "product_code=kkkkkkkkkk"
    
    text = timestamp + method + uri.request_uri
    sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text)
    
    options = Net::HTTP::Get.new(uri.request_uri, initheader = {
                                 "ACCESS-KEY" => key,
                                 "ACCESS-TIMESTAMP" => timestamp,
                                 "ACCESS-SIGN" => sign,
                                 });
    
    https = Net::HTTP.new(uri.host, uri.port)
    https.use_ssl = true
    response = https.request(options)
    
    json = response.body
    getpositions = JSON.parse(json)
    getpositions || (getpositions = 0)
    puts getpositions[0]["size"]        # ここに値が入ってないとエラーになります。
    
[/code]

エラーコード

[code]

    size.rb:31:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)
    
[/code]




まず、空文字のjson(`[]`や`{}`)は、`||`演算子では`true`に判定されるため、

[code]

    getpositions || (getpositions = 0)
    
[/code]

のコードでは、0は代入されず`[]`のままです。

この時、`getpositions[0]`とすると`nil`が取得されるため、`["size"]`にアクセスした時、ご提示のエラーとなります。

もし、`getpositions`に0を代入したとしても、0に対して`["size"]`を取得することになるため、こちらもエラーとなります。

ですので、以下のように、三項演算子等で`getpositions`が空かどうかをチェックして`["size"]`にアクセスすると良いかと思います。

[code]

    json = response.body
    getpositions = JSON.parse(json)
    puts getpositions.empty? ? 0 : getpositions[0]["size"]
    
[/code]




まず、空文字のjson(`[]`や`{}`)は、`||`演算子では`true`に判定されるため、

[code]

    getpositions || (getpositions = 0)
    
[/code]

のコードでは、0は代入されず`[]`のままです。

この時、`getpositions[0]`とすると`nil`が取得されるため、`["size"]`にアクセスした時、ご提示のエラーとなります。

もし、`getpositions`に0を代入したとしても、0に対して`["size"]`を取得することになるため、こちらもエラーとなります。

ですので、以下のように、三項演算子等で`getpositions`が空かどうかをチェックして`["size"]`にアクセスすると良いかと思います。

[code]

    json = response.body
    getpositions = JSON.parse(json)
    puts getpositions.empty? ? 0 : getpositions[0]["size"]
    
[/code]

