サービス間でデータを移動しようとしていますが、ハッシュと配列の両方を含む大きなレコードから繰り返し発生するハッシュを削除する必要があります。
レコードのすべてのセクションから削除するハッシュは
{
"description": "simple identifier",
"name": "id",
"type": "id"
},
Heres の例のデータ:
{"stuff": { "defs": [
{
"description": "simple identifiery",
"name": "id",
"type": "id"
},
{
"name": "aDate",
"type": "date"
},
{
"defs": [
{
"description": "simple identifier",
"name": "id",
"type": "id"
},
{
"case-sensitive": true,
"length": null,
"name": "Id",
"type": "string"
},
{
"name": "anotherDate",
"type": "dateTime"
}
],
},
{
"defs": [
{
"description": "simple identifier",
"name": "id",
"type": "id"
},
...さらに多く....
要素を削除するためにいくつかの再帰関数を作成しましたが、空のハッシュ '{}' が残っています。親も削除しようとしましたが、ハッシュ自体ではなく、ハッシュの親を削除したことがわかりました。
新しいハッシュを作成して、必要なデータを入力できると確信していますが、これを行う方法が必要です。
私は Rails で作業していないので、Rails gem の使用を避けたいと考えています。
データ構造を詳しく見て、これを理解しました。削除する必要がある要素は常に配列内にあるため、再帰する前にハッシュ キー/値が存在するかどうかを確認し、存在する場合は削除します。これはもっとうまくコーディングできると確信しているので、あなたの考えを教えてください。
def recursive_delete!(node, key, value)
if node.is_a?(Array)
node.delete_if { |elm| elm[key] == value }
node.each do |elm|
recursive_delete!(elm, key, value)
end
elsif node.is_a?(Hash)
node.each_value do |v|
recursive_delete!(v, key, value)
end
end
end