ruby符号的编码和解码
我发现了multi_json ruby gem的这种行为: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
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”}
),我明白了,最好对此有某种规则。