Ruby中的JSON反序列化

问题描述 投票:4回答:2

在Ruby中是否有与Java的Google JSON等效的JSON反序列化。无需为每个类定义任何自定义序列化器或反序列化器,只需编写一行代码即可将JSON字符串转换为自定义Java类,如下所示。

Address address=gson.fromJson(addressJsonStringForm, Address.class);

要完成此操作,无需在Address类中放置任何注释/接口,也无需为我们需要反序列化的每个类编写单独的Deserializer实用程序。这使得从第三方库反序列化/序列化类非常容易。是否要对null进行序列化/包含/排除某些属性等,有很多选择。我正在Ruby中寻找这样的通用JSON,并将其用于自定义对象序列化/反序列化实用程序。我是Ruby的新手。

参考:

https://dzone.com/articles/deserializing-json-java-object

ruby-on-rails json ruby gson json-deserialization
2个回答
4
投票

jsonapi-rb

    DeserializablePost.call(json_hash)

roar

    song = Song.new(title: "Medicine Balls")
    SongRepresenter.new(song).from_json('{"title":"Linoleum"}')
    song.title #=> Linoleum

Netflix - fast_jsonapi

    json_string = MovieSerializer.new(movie).serialized_json

4
投票

您可以使用JSON模块将其转换为Hash:

require 'json'

hash = JSON.parse('{"age":18, "name":"Vinicius"}')
hash["age"]
=> 18

如果要将其转换为“结构化”对象,则可以使用OpenStruct:

require 'json'
require 'ostruct'

person = JSON.parse('{"age":18, "name":"Vinicius"}', object_class: OpenStruct)
person.name
=> "Vinicius"

OpenStruct是一种类似于哈希的数据结构,它允许定义任意属性及其伴随的值。这是通过使用Ruby的元编程在类本身上定义方法来实现的。 (docs)

如果您不总是知道JSON密钥,则OpenStruct可能会为您提供帮助,因为它会动态创建对象。

© www.soinside.com 2019 - 2024. All rights reserved.