- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
有什么方法可以防止 Ruby 的 JSON.pretty_generate()
方法转义 Unicode 字符吗?
我有一个 JSON 对象如下:
my_hash = {"my_str" : "\u0423"};
运行 JSON.pretty_generate(my_hash)
返回值 \\u0423
。
有什么办法可以防止这种行为吗?
最佳答案
在你的问题中,你有一个由 6 个 unicode 字符组成的字符串 "\"
, "u"
, "0"
, "4"
, "2"
, "3"
(my_hash = { "my_str"=> '\u0423' }
), 而不是由 1 个 "У"
字符组成的字符串("\u0423"
,注意双引号)。
根据 RFC 4627 ,第 2.5 段,必须转义 JSON 字符串中的反斜杠字符,这就是为什么您从 JSON.pretty_generate
获得双反斜杠的原因。
Alternatively, there are two-character sequence escape
representations of some popular characters. So, for example, a
string containing only a single reverse solidus character may be
represented more compactly as "\\".
char = unescaped /
escape (...
%x5C / ; \ reverse solidus U+005C
escape = %x5C ; \
因此JSON ruby gem 在内部转义此字符,并且无法通过参数化 JSON
或 JSON.pretty_generate
来改变此行为。
如果您对 JSON gem 实现细节感兴趣 - 它定义了内部映射散列与 '' char 的显式映射:
module JSON
MAP = {
...
'\\' => '\\\\'
我从 JSON gem gem install json_pure
的纯 ruby 变体 中获取了这段代码(请注意,还有 C 扩展变体由 gem install json
分发。
结论:如果您需要在 JSON 生成后取消转义反斜杠,您需要在您的应用程序逻辑中实现它,如上面的代码:
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}"
希望这对您有所帮助!
关于ruby - 防止 JSON pretty_generate 转义 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499200/
有什么方法可以防止 Ruby 的 JSON.pretty_generate() 方法转义 Unicode 字符吗? 我有一个 JSON 对象如下: my_hash = {"my_str" : "\u0
我似乎无法让 JSON.pretty_generate() 在 Rails 中实际生成漂亮的输出。 我正在使用 Rails 2.3.5,它似乎会自动加载 JSON gem。惊人的。在使用 script
首先,我的引用资料: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/json/rdoc/JSON.html http://apidock.com/ruby/J
我是一名优秀的程序员,十分优秀!