अपने प्रश्न में आप 6 यूनिकोड वर्ण "\"
, के एक स्ट्रिंग है "u"
, "0"
, "4"
, "2"
, "3"
(my_hash = { "my_str" => '\u0423' }
), न कोई स्ट्रिंग 1 "У"
चरित्र से मिलकर ("\u0423"
, ध्यान दें दोहरे उद्धरण चिह्नों)।
RFC 4627, पैरा 2.5, JSON स्ट्रिंग में बैकस्लैश चरित्र भाग निकले किया जाना चाहिए के अनुसार, इस वजह से आपके JSON.pretty_generate
से डबल बैकस्लैश मिलता है।
वैकल्पिक रूप से, वहाँ दो चरित्र अनुक्रम से बचने के कुछ लोकप्रिय पात्रों में से
निरूपण कर रहे हैं। इसलिए, उदाहरण के लिए,
स्ट्रिंग जिसमें केवल एक रिवर्स ठोस वर्ण होता है
अधिक जटिल रूप से "\\" के रूप में प्रदर्शित किया जा सकता है।
char = unescaped/
escape (...
%x5C/ ; \ reverse solidus U+005C
escape = %x5C ; \
इस प्रकार JSON माणिक रत्न आंतरिक रूप से इस चरित्र से बचने और वहाँ JSON
या JSON.pretty_generate
parametrizing करके इस व्यवहार को बदलने के लिए कोई रास्ता नहीं है।
आप JSON मणि कार्यान्वयन विवरण में रुचि रखते हैं - यह '\' चार की स्पष्ट मानचित्रण के साथ आंतरिक मानचित्रण हैश परिभाषित करता है:
module JSON
MAP = {
...
'\\' => '\\\\'
मैं JSON के शुद्ध माणिक संस्करण से इस कोड को ले लिया मणि gem install json_pure
(ध्यान दें कि सी एक्सटेंशन संस्करण है जो gem install json
द्वारा वितरित किया जाता है)।
निष्कर्ष: आप JSON genaration के बाद बैकस्लैश आप अपने आवेदन तर्क में इसे लागू करने की जरूरत है unescape करने के लिए, उपरोक्त कोड में की तरह की जरूरत है:
my_hash = { "my_str" => '\u0423' }
# => {"my_str"=>"\\u0423"}
json = JSON.pretty_generate(my_hash)
# => "{\n \"my_str\": \"\\\\u0423\"\n}"
res = json.gsub "\\\\", "\\"
# => "{\n \"my_str\": \"\\u0423\"\n}"
आशा इस मदद करता है!
मैं इस समस्या को दोहराना नहीं कर सकता। यदि आप हैश सिंटैक्स का उपयोग कर रहे हैं: आपको रूबी 1.9 का उपयोग करना होगा, और सभी 1.9.2-3 का मैं सही तरीके से जांच करूँगा क्योंकि डीएनएनएक्स यहां उनके जवाब में कहता है। आप 1.9.1 का उपयोग कर रहे हैं हालांकि (मेरे पास वह संस्करण नहीं है क्योंकि यह कभी भी अच्छा काम नहीं करता है)। 1.8.7 काम नहीं करता है, और इसके लिए कोई कामकाज नहीं लगता है। – sunkencity