Eğer 6 unicode karakterleri "\"
, bir ipe sahip "u"
, "0"
, "4"
, "2"
, "3"
(my_hash = { "my_str" => '\u0423' }
) değil, 1 "У"
karakteri oluşan bir dize ("\u0423"
, çift tırnak dikkat edin). senin JSON.pretty_generate
gelen çift ters eğik çizgi olsun neden RFC 4627, 2.5 JSON dizesinde ters eğik çizgi karakteri şekilde çıkmalıdır paragraf uyarınca
, bu.
Alternatif iki karakter dizisini bazı popüler karakterlerden
temsillerini kaçış vardır. Örneğin, sadece bir tek ters katı karakter içeren bir
dizgisi "\\" olarak daha yoğun olarak temsil edilen
olabilir.
char = unescaped/
escape (...
%x5C/ ; \ reverse solidus U+005C
escape = %x5C ; \
Böylece JSON yakut mücevher içten bu kaçış karakteri ve JSON
veya JSON.pretty_generate
parametrizasyonunu bu davranışı değiştirmek için bir yolu yoktur.
module JSON
MAP = {
...
'\\' => '\\\\'
JSON bir saf yakut varyantı gelen bu kodu aldı: o '\' char açık eşleştirme ile iç haritalama karma tanımlar - Eğer JSON mücevher uygulama ayrıntıları ilgileniyorsanız
gem gem install json_pure
(gem install json
tarafından dağıtılan C uzantı varyantı vardır).
Sonuç: Eğer yukarıdaki kodda olduğu gibi başvurunuzun mantığında uygulamak gerekir JSON Üretiminde kömür sonra ters eğik çizgi okunabilir hale getirmek için gerekirse: Bu yardımcı olur
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}"
Umut!
Bu sorunu tekrarlayamıyorum. Eğer hash sözdizimini a: ile kullanıyorsanız, ruby 1.9'u kullanmalısınız ve kontrol ettiğim 1.9.2-3'lerin tümü, DNNX'in cevabında yazdığı gibi doğru yolu gerçekleştirmelidir. Yine de 1.9.1 kullanıyor olabilirsiniz (o kadar iyi çalışmadığı için o versiyona sahip değilim). 1.8.7 çalışmıyor ve bunun için bir çözüm yok gibi görünüyor. – sunkencity