2011-05-03 11 views
6
{"user"=> 
    {"bio"=>"rubyist", 
    "created_at"=>"2011-05-03T15:21:46+02:00", 
    "email"=>"[email protected]", 
    "id"=>61, "name"=>"paul", 
    "updated_at"=>"2011-05-03T15:21:46+02:00"}} 

क्या डबल डबल कोट्स और एकल उद्धरण का उपयोग कर ?: बीच का अंतर हैरुबी में हैश से पूछने के लिए सिंगल कोट्स और डबल कोट्स का उपयोग करने के बीच क्या अंतर है?

attributes = JSON.parse(last_response.body)["user"] 
attributes = JSON.parse(last_response.body)['user'] 

ऐसा लगता है कि पहले मामले में काम करता है, लेकिन दूसरे मामले किसी भी कुंजी नहीं मिल रहा है। मुझे समझ में नहीं आता क्यों।

+6

कोई अंतर नहीं होना चाहिए ... आपको दूसरी बार क्या सटीक त्रुटि मिलती है? –

+2

और यदि आप दोनों पंक्तियों को क्रम में बदलते हैं, तो क्या यह अभी भी डबल कोट्स के साथ भिन्नता है जो काम करता है? – moritz

+2

मुझे विश्वास नहीं है कि आप वास्तव में परिणाम प्राप्त कर रहे हैं जो आप कहते हैं। रुबी के लिए किसी भी तरह से व्यवहार करने के लिए इस मामले में संभव नहीं है। – Phrogz

उत्तर

3

कि अजीब बात है, वे उसी तरह से काम करना चाहिए और क्या मेरे लिए:

>> user = {"user"=> 
..  {"bio"=>"rubyist", 
..   "created_at"=>"2011-05-03T15:21:46+02:00", 
..   "email"=>"[email protected]", 
..   "id"=>61, "name"=>"paul", 
..   "updated_at"=>"2011-05-03T15:21:46+02:00"}}.to_json 
#=> "{"user":{"bio":"rubyist","created_at":"2011-05-03T15:21:46+02:00","email":"[email protected]","id":61,"name":"paul","updated_at":"2011-05-03T15:21:46+02:00"}}" 
>> attributes = JSON.parse(user)["user"] 
#=> {"bio"=>"rubyist", "created_at"=>"2011-05-03T15:21:46+02:00", "email"=>"[email protected]", "id"=>61, "name"=>"paul", "updated_at"=>"2011-05-03T15:21:46+02:00"} 
>> attributes = JSON.parse(user)['user'] 
#=> {"bio"=>"rubyist", "created_at"=>"2011-05-03T15:21:46+02:00", "email"=>"[email protected]", "id"=>61, "name"=>"paul", "updated_at"=>"2011-05-03T15:21:46+02:00" 
6

की तरह "उपयोगकर्ता" सादे-पाठ कुंजी के मामले में यह वास्तव में कोई फर्क नहीं चाहिए, यह अजीब यह है वास्तव में काम नहीं कर रहा है। लेकिन यदि आपकी कुंजी एक अभिव्यक्ति है, तो कहें, "# {variable_here}", तब तक मूल्यांकन नहीं किया जाएगा जब तक आप डबल कोट्स का उपयोग नहीं कर रहे हों। क्या यह मामला है?

6

एकल उद्धरण और रूबी में दोहरे उद्धरण चिह्नों के बीच एक प्रमुख अंतर यह है कि दोहरे उद्धरण चिह्नों स्ट्रिंग प्रक्षेप करते हैं, जबकि एकल उद्धरण नहीं है:

ruby-1.9.2-p180 :001 > puts "one plus one is #{1 + 1}" 
one plus one is 2 
=> nil 
ruby-1.9.2-p180 :002 > puts 'one plus one is #{1 + 1}' 
one plus one is #{1 + 1} 
=> nil 

आपके मामले में, जब एक हैश तक पहुँचने, यह कोई बनाना चाहिए अंतर:

ruby-1.9.2-p180 :003 > {'one' => 1}['one'] 
=> 1 
ruby-1.9.2-p180 :004 > {'one' => 1}["one"] 
=> 1 
7

अंतर के लिए, पहले से ही अन्य अच्छे उत्तर हैं। मुझे संदेह है कि आपके पास एक-बाइट सिंगल कोट नहीं है।

attributes = JSON.parse(last_response.body)[`user`] 

या multibyte एकल उद्धरण:

हो सकता है, आप backquotes हो सकता है

attributes = JSON.parse(last_response.body)[’user’] 

अगर ऐसी बात है, वे एक-बाइट एकल उद्धरण से बदला जाना चाहिए।

+0

+1 – Phrogz

+0

@Phrogz धन्यवाद। – sawa

+0

और हम सभी के लिए एक +1 जिन्होंने स्क्रीन पर घंटों तक एक घंटे बिताया है, यह पता लगाने की कोशिश कर रहा है कि कुछ भाषा क्यों बार्फ़िंग कर रही है, केवल समस्या का पता लगाने के लिए एक घुंघराले डबल या सिंगल-कोट था जो छुपा था क्योंकि फ़ॉन्ट इस्तेमाल कर रहे थे घुंघराले उद्धरण नहीं था। –

संबंधित मुद्दे