如何访问包含类似散列对象的数组
How to access an Array containing hash-like objects
我从 API 收到了一个数组,由于缺少更好的短语,它似乎包含对象样式的表示法。
因为它是一个数组,我显然不能通过键或值来访问它。我没有在这个特定的对象类型中看到允许我将其转换为散列或 JSON 然后再转换为散列的方法。
将其转换为哈希的最合适方法是什么,我可以通过键和值访问数据?
输出:
[#<ObjectType::ObjectRef:0x30f2862
@_ref="record:full/data/location/setting/partition",
@configured=false,
@name="John Doe",
@addr="10.10.10.10">]
或者,如果可以将其转换为包含多个元素的数组(而不是一个大的块状元素),我可以将其解析为 CSV 并在 Ruby 之外进行过滤。新数组中的元素将包含 "values"(例如 false、"John Doe"、“10.10.10.10”)。
试试这个:
array # => [#<ObjectType::ObjectRef:0x30f2862
@_ref="record:full/data/location/setting/partition",
@configured=false,
@name="John Doe",
@addr="10.10.10.10">]
array.map { |a| {configured: a.configured, name: a.name, addr: a.addr} }
# or if you can't access the instance variables
array.map do |a|
{
configured: a.instance_variable_get(:@configured),
name: a.instance_variable_get(:@name),
addr: a.instance_variable_get(:@addr)
}
end # => [{configured: false, name: "John Doe", addr: "10.10.10.10"}]
# and if you want an array
array.map do |a|
[
a.instance_variable_get(:@configured),
a.instance_variable_get(:@name),
a.instance_variable_get(:@addr)
]
end # => [[false, "John Doe", "10.10.10.10"]]
我从 API 收到了一个数组,由于缺少更好的短语,它似乎包含对象样式的表示法。
因为它是一个数组,我显然不能通过键或值来访问它。我没有在这个特定的对象类型中看到允许我将其转换为散列或 JSON 然后再转换为散列的方法。
将其转换为哈希的最合适方法是什么,我可以通过键和值访问数据?
输出:
[#<ObjectType::ObjectRef:0x30f2862
@_ref="record:full/data/location/setting/partition",
@configured=false,
@name="John Doe",
@addr="10.10.10.10">]
或者,如果可以将其转换为包含多个元素的数组(而不是一个大的块状元素),我可以将其解析为 CSV 并在 Ruby 之外进行过滤。新数组中的元素将包含 "values"(例如 false、"John Doe"、“10.10.10.10”)。
试试这个:
array # => [#<ObjectType::ObjectRef:0x30f2862
@_ref="record:full/data/location/setting/partition",
@configured=false,
@name="John Doe",
@addr="10.10.10.10">]
array.map { |a| {configured: a.configured, name: a.name, addr: a.addr} }
# or if you can't access the instance variables
array.map do |a|
{
configured: a.instance_variable_get(:@configured),
name: a.instance_variable_get(:@name),
addr: a.instance_variable_get(:@addr)
}
end # => [{configured: false, name: "John Doe", addr: "10.10.10.10"}]
# and if you want an array
array.map do |a|
[
a.instance_variable_get(:@configured),
a.instance_variable_get(:@name),
a.instance_variable_get(:@addr)
]
end # => [[false, "John Doe", "10.10.10.10"]]