में कैमेलकेस से सांप_case में नेस्टेड हैश कुंजी को कनवर्ट करना मैं एपीआई रैपर मणि बनाने की कोशिश कर रहा हूं, और जेएसओएन एपीआई रिटर्न से अधिक रूबीश प्रारूप में हैश कुंजी को परिवर्तित करने के साथ समस्याएं हैं।रूबी
JSON घोंसले की कई परतों, दोनों Hashes और सरणी शामिल हैं। मैं क्या करना चाहता हूं कि आसान उपयोग के लिए सभी कुंजी को snake_case में दोबारा परिवर्तित करना है।
यहाँ क्या मैं अब तक मिल गया है: snake_case को
def convert_hash_keys(value)
return value if (not value.is_a?(Array) and not value.is_a?(Hash))
result = value.inject({}) do |new, (key, value)|
new[to_snake_case(key.to_s).to_sym] = convert_hash_keys(value)
new
end
result
end
ऊपर कॉल इस विधि तार कन्वर्ट करने के लिए:
def to_snake_case(string)
string.gsub(/::/, '/').
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
tr("-", "_").
downcase
end
आदर्श रूप में, परिणाम निम्न के समान होगा:
hash = {:HashKey => {:NestedHashKey => [{:Key => "value"}]}}
convert_hash_keys(hash)
# => {:hash_key => {:nested_hash_key => [{:key => "value"}]}}
मुझे रिकर्सन गलत मिल रहा है, और इस तरह के समाधान के हर संस्करण में मैंने कोशिश की है पहले स्तर से प्रतीकों को परिवर्तित नहीं करता है, या ओवरबोर्ड चला जाता है और मूल्य सहित पूरे हैश को बदलने की कोशिश करता है।
यदि संभव हो तो वास्तविक हैश और स्ट्रिंग फ़ंक्शंस को संशोधित करने के बजाय, इसे एक सहायक वर्ग में हल करने का प्रयास करना।
अग्रिम धन्यवाद।
कुछ और करने से पहले, 'अगर (नहीं ... और नहीं ...)' डी मॉर्गन के कानून का उपयोग करने के लिए एक आदर्श स्थान है। आपको इसे लिखना चाहिए जब तक ... या ... '। – sawa