2011-09-08 1 views
0

안녕하세요 여러분, 양식 제출을 기반으로 일부 json을 구성하려고합니다. 기본적으로Ruby/Rails 중첩 된 해시 myhash [ "key1"] [ "childkey"] - NoMethodError

{"id":0,"creditCard":{"address":{"state":"AZ"}}} 

내가 이런 식으로 일을하려고 해요 : : 내 JSON은 (편의상립니다) 같은 것을 할 필요가

json_hash = Hash.new 
json_hash["id"] = 0 
json_hash["creditCard"]["address"]["state"] = "test" 
json_hash.to_json 

을하지만이 errror 던지는 :

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.[] 

주어진 예제의 세 번째 줄에서 (깊이 중첩 된 것). 루비 해시가 이렇게 작동합니까? 아니면 내가 취해야 할 추가 단계가 있습니까?

답변

2

json_hash['creditCard']nil이므로 세 번째 줄에는 [] 메서드가 없습니다.

당신은

json_hash = { "id" => 0,"creditCard" => { "address" => {"state" => "AZ"}}} 

를 사용하여 그와 같은 해시를 구축 할 수 있으며 지정된 형식이 있습니다.

그 짧은 문법은 원하는 내용을 json_hash에 지정하면 이 아닌 단일 해시입니다. 그런 다음이 저장 그 "creditCard"에 해당 "id" 키 0 값을 갖는 해시 "address"다른 해시 (즉 {"state" => "AZ"})를 포함하는 다른 해시. 이 놀리려는 성적 증명서에

봐 :

pry(main)> json_hash = { "id" => 0,"creditCard" => { "address" => {"state" => "AZ"}}} 
=> {"id"=>0, "creditCard"=>{"address"=>{"state"=>"AZ"}}} 
pry(main)> json_hash.object_id 
=> 2175368520 
pry(main)> json_hash['creditCard'].object_id 
=> 2175368560 
pry(main)> json_hash['creditCard']['address'].object_id 
=> 2175368600 

모든 값이 다른 object_id이는 그래서 그들은 같은 일 같은 일의,도 재산이 아니다.