gpt4 book ai didi

ruby - 如何从 JSON 解析自定义 Ruby 结构

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:40 24 4
gpt4 key购买 nike

我有一个从 Struct 继承其行为的实体。它像这样实例化:

Entity.new(id: 'asdf', name: 'bill', hair: 'brown')

当我将结构强制转换为 json 时,它看起来像这样:

#<struct Entity id=\"asdf\", name=\"bill\",
hair=\"brown\">"

编辑:^^ 忽略这个。我试图让事情变得模糊,但这是我的 irb session 的直接复制/粘贴:


"\"#<struct SorrisoEntity::EmailMessage recipient_email=nil, sender_email=\\\"poo@aol.com\\\", subject_line=nil, body=nil>\""

当我将它强制转换为 JSON 时,它不会抛出错误。但是当我尝试调用“JSON.parse”时,出现了这个错误:

JSON::ParserError: 757: unexpected token at '"#<struct Entity id=\"asdf\", name=\"bill\", hair=\"brown\">"

为什么 Ruby 不能适本地编码自定义结构?

最佳答案

这没有记录,但我必须阅读 json 的 ruby​​ 源代码及其测试才能得到它,你需要手动 require 'json/add/struct' 并传递参数 :create_additions => true 以使其正常工作,如下所示:

Entity = Struct.new('Entity', :id, :name, :hair)
entity = Entity.new("asdf", "bill", "brown")
# => #<struct Struct::Entity id={"id"=>"asdf", "name"=>"bill", "hair"=>"brown"}, name=nil, hair=nil>
require 'json/add/struct'
entity.to_json
# => "{\"json_class\":\"Struct::Entity\",\"v\":[\"asdf\",\"bill\",\"brown\"]}"
new_entity = JSON.parse(entity.to_json, :create_additions => true)
# => #<struct Struct::Entity id="asdf", name="bill", hair="brown">
new_entity.name
# => "bill"

关于ruby - 如何从 JSON 解析自定义 Ruby 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23463658/

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