Is there a way to achieve what ensure_ascii does in python’s JSON serialization? In that I want non-7-bit-ASCII characters to come out as \u00B7
?
Assuming you are dealing with deserialization, then all you need is act on String
object. But if you want to encode Crystal Strings to ascii chars, then you will need to override to_json
method and ensure you invoke String#dump_xxxx
methods. Refer to String documentation for more details on dump
and its related methods
json = %({"text": "abc 汉语"})
record Foo, text : String do
include JSON::Serializable
def ascii_text
text.dump_unquoted
end
end
str = Foo.from_json(json)
pp str.text # => abc 汉语
pp str.ascii_text # => abc \\u6C49\\u8BED
HIH
I’m dealing with serialization; thanks for the dump_unqouted tip! I can do
.to_json.gsub(/[^ -~\r\n]/){|c| c.dump_unquoted}
to get the desired result.