Обращаясь за советом, что, по вашему мнению, было бы лучшим и простым решением для замены и доступа к значениям во вложенном хэше или json переменной path с помощью ruby?
Например, представьте, что у меня есть json или hash с такой структурой:
{
"name":"John",
"address":{
"street":"street 1",
"country":"country1"
},
"phone_numbers":[
{
"type":"mobile",
"number":"234234"
},
{
"type":"fixed",
"number":"2342323423"
}
]
}
И я хотел бы получить доступ или изменить фиксированный номер мобильного телефона по пути, который может быть указан в такой переменной, как эта: "phone_numbers/1/number"
(разделитель не имеет значения в этом случае)
Это решение необходимо для извлечения значений из json / hash и иногда замены переменных путем указания пути к нему.Нашел несколько решений, которые могут найти значение по ключу, но это решение не сработает, поскольку есть несколько хешей / json, где имя ключа во многих местах одинаково.
Я видел это: https://github.com/chengguangnan/vine, но он не работает, когда полезная нагрузка похожа на эту, поскольку в данном случае это не своего рода хеш:
[
{
"value":"test1"
},
{
"value":"test2"
}
]
Надеюсь, у вас есть отличные идеи, как решить эту проблему.
Спасибо!
РЕДАКТИРОВАТЬ: Итак, я попробовал код ниже с этими данными:
x = JSON.parse('[
{
"value":"test1"
},
{
"value":"test2"
}
]')
y = JSON.parse('{
"name":"John",
"address":{
"street":"street 1",
"country":"country1"
},
"phone_numbers":[
{
"type":"mobile",
"number":"234234"
},
{
"type":"fixed",
"number":"2342323423"
}
]
}')
p x
p y.to_h
p x.get_at_path("0/value")
p y.get_at_path("name")
И получил это:
[{"value"=>"test1"}, {"value"=>"test2"}]
{"name"=>"John", "address"=>{"street"=>"street 1", "country"=>"country1"}, "phone_numbers"=>[{"type"=>"mobile", "number"=>"234234"}, {"type"=>"fixed", "number"=>"2342323423"}]}
hash_new.rb:91:in `<main>': undefined method `get_at_path' for [{"value"=>"test1"}, {"value"=>"test2"}]:Array (NoMethodError)
Для y.get_at_path("name")
получил nil