Json 如何更改Ruby的哈希返回格式
我有以下散列:Json 如何更改Ruby的哈希返回格式,json,ruby,ruby-hash,Json,Ruby,Ruby Hash,我有以下散列: {"description":"Hello","id":"H"}` 如果我在控制台中键入哈希,我会得到: {:description=>"Hello", :id=>"H"} 我希望它使用“description”和“id”返回前面提到的相同表单 有没有办法更改我的哈希返回的格式?您有一个带有密钥的: hash = {:description=>"HS - Hours", :id=>"HS"} hash.stringify_keys => {"d
{"description":"Hello","id":"H"}`
如果我在控制台中键入哈希,我会得到:
{:description=>"Hello", :id=>"H"}
我希望它使用“description”
和“id”
返回前面提到的相同表单
有没有办法更改我的哈希返回的格式?您有一个带有密钥的:
hash = {:description=>"HS - Hours", :id=>"HS"}
hash.stringify_keys
=> {"description"=>"HS - Hours", "id"=>"HS"}
考虑一下这一点:
({"description": "Hello", "id": "H"}) == ({"description"=> "Hello", "id"=> "H"})
#=> false
({"description": "Hello", "id": "H"}) == ({description: "Hello", id: "H"})
#=> true
Ruby仅在打印时删除“
:
p ({"description":"Hello","id":"H"})
#=> {:description=>"Hello", :id=>"H"}
如果您想将密钥转换为,可以使用纯Ruby(或bang版本的
转换密钥!
):
如果您正在寻找json,请执行以下操作:
require 'json'
puts h.to_json
#=> {"description":"Hello","id":"H"}
还考虑到:
h.to_json.class #=> String
h.class #=> Hash
您有一个带钥匙的: 考虑一下这一点:
({"description": "Hello", "id": "H"}) == ({"description"=> "Hello", "id"=> "H"})
#=> false
({"description": "Hello", "id": "H"}) == ({description: "Hello", id: "H"})
#=> true
Ruby仅在打印时删除“
:
p ({"description":"Hello","id":"H"})
#=> {:description=>"Hello", :id=>"H"}
如果您想将密钥转换为,可以使用纯Ruby(或bang版本的
转换密钥!
):
如果您正在寻找json,请执行以下操作:
require 'json'
puts h.to_json
#=> {"description":"Hello","id":"H"}
还考虑到:
h.to_json.class #=> String
h.class #=> Hash
用于提供对象可读表示的方法是
#inspect
。这也是大多数REPL用来显示对象的方法,尽管有些REPL使用其他特定于REPL的方法,如#pretty_inspect
非常重要的是,所有这些方法仅供人类使用。您不能解析它们的输出,不能将它们用于序列化、处理或任何其他目的,而只能将其用于调试目的
因此,知道所讨论的方法是Hash#inspect
,您可以尝试重写该方法。请注意,更改核心方法的行为永远不应该在生产代码中进行。以下仅为该答案的示例:
模块HashPrettyPrintExtension
def检查
“{'”你好“,:id=>“H”}
使用hashprettyprintfinition
{“description”:“Hello”,“id”:“H”}
#=>{“描述”:“你好”,“id”:“H”}
请注意,您建议的输出有一定的限制。它只适用于Symbol
s的键和String
s的值,而在Ruby中,键可以是任意对象,值可以是任意对象
此外,您建议的输出与
#inspect
的目标正好相反,即提供人类可读的调试输出,因为键不是字符串不容易看到。用于提供对象的人类可读表示的方法是#inspect
。这也是大多数REPL用来显示对象的方法,尽管有些REPL使用其他特定于REPL的方法,如#pretty_inspect
非常重要的是,所有这些方法仅供人类使用。您不能解析它们的输出,不能将它们用于序列化、处理或任何其他目的,而只能将其用于调试目的
因此,知道所讨论的方法是Hash#inspect
,您可以尝试重写该方法。请注意,更改核心方法的行为永远不应该在生产代码中进行。以下仅为该答案的示例:
模块HashPrettyPrintExtension
def检查
“{'”你好“,:id=>“H”}
使用hashprettyprintfinition
{“description”:“Hello”,“id”:“H”}
#=>{“描述”:“你好”,“id”:“H”}
请注意,您建议的输出有一定的限制。它只适用于Symbol
s的键和String
s的值,而在Ruby中,键可以是任意对象,值可以是任意对象
此外,您建议的输出与
#inspect
的目标正好相反,即提供人类可读的调试输出,因为键不是字符串不容易看到。这几乎是我想要的,但我需要键和它们各自的值之间的分隔为分号,不是箭头=>您试图实现的结果看起来更像json。不能用分号分隔散列。试试hash.to_JSON,它看起来像JSON。这可能是一个XY问题:“你能解释一下你到底想做什么以及为什么要这么做吗?这几乎就是我想要的,但我需要键和它们各自的值之间的分隔是分号,而不是箭头=>你试图实现的结果看起来更像一个json。不能用分号分隔散列。试试hash.to_JSON,它看起来像JSON。这可能是一个XY问题:“你能解释一下你到底想做什么以及为什么要这么做吗?从技术上讲,如果你覆盖了用于转储的哈希方法,那么是的,但不鼓励这样做,特别是当其他人正在使用你的代码并且期望默认输出时。与其试图改变它,不如理解这两种形式是同义的。你是想得到散列的JSON表示吗?如果是,请尝试hash.to_json
。(您可能必须要求使用“json”
)从技术上讲,如果您覆盖用于转储的哈希方法,则是可以的,但不鼓励这样做,尤其是当其他人正在使用您的代码并期望默认输出时。与其试图改变它,不如理解这两种形式是同义的。你是想得到散列的JSON表示吗?如果是,请尝试hash.to_json
。(您可能必须要求使用“json”
)