gpt4 book ai didi

ruby - 防止 JSON pretty_generate 转义 Unicode

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:33 24 4
gpt4 key购买 nike

有什么方法可以防止 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 在内部转义此字符,并且无法通过参数化 JSONJSON.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com