ruby符号的编码和解码

ruby符号的编码和解码,ruby,json,Ruby,Json,我发现了multi_json ruby gem的这种行为: 2.1.0 :001 > require 'multi_json' => true 2.1.0 :002 > sym = :symbol => :symbol 2.1.0 :003 > sym.class => Symbol 2.1.0 :004 > res = MultiJson.load MultiJson.dump(sym) => "symbol" 2.1.0 :005 &g

我发现了multi_json ruby gem的这种行为:

2.1.0 :001 > require 'multi_json'
 => true
2.1.0 :002 > sym = :symbol
 => :symbol
2.1.0 :003 > sym.class
 => Symbol
2.1.0 :004 > res = MultiJson.load MultiJson.dump(sym)
 => "symbol"
2.1.0 :005 > res.class
 => String

这是存储ruby符号的合适方法吗?JSON是否提供了某种方法来区分
:symbol
“string”

答案很简单。大多数情况下,它只对散列真正重要,而且散列上有一个欺骗,
symbol\u key。归根结底,JSON不理解符号,只理解字符串

由于您使用的是MultiJson,您也可以要求MultiJson为您执行此操作

MultiJson.load('{"abc":"def"}', :symbolize_keys => true)

JSON中的有效值包括字符串、数字、对象、数组、布尔值和null。其他类型必须转换,这就是为什么符号存储为字符串。所以唯一的方法是手动对键进行符号化?明白了,谢谢!您可以使用-但这需要您控制散列创建,我认为使用MultiJson不容易做到这一点。所以,如果你想深入研究MultiJson,也许你可以做到。事实证明,我撒谎了,它已经内置了:
MultiJson.load(“{”abc:“def”}',:symbol_keys=>true)
我实际上考虑了转储加载周期后密钥类型的唯一定义。但是由于它可以合并成一个(
{:abc=>“abc”,“abc”=>“def”}=>{“abc”=>“def”}
),我明白了,最好对此有某种规则。