Разобрать сложный хеш и вернуть изменения в ключи - PullRequest
0 голосов
/ 17 ноября 2018

Я использую гем json-compare для сравнения двух разных файлов json.

Файл примера 1:

{"suggestions": [
      {
        "id1": 1,
        "title1": "Test",
        "body1": "Test"
       }
    ]
}

Файл примера 2:

{"suggestions": [
      {
        "id2": 1,
        "title2": "Test",
        "body2": "Test"
      }
    ]
}

Драгоценный камень работает хорошо и выдает хеш, который выглядит следующим образом:

  {:update=> 
    {"suggestions" => 
        {:update=>
          {0=>
            {:append=>
                {"id2"=>1, "title2"=>"Test", "body2"=>"Test"}, 
             :remove=>
                {"id1"=>1, "title1"=>"Test", "body1"=>"Test"}, 
             }
          }
        }
    }
}

Как я могу разобрать это и вернуть все места, где были изменены ключи json?Для простоты, как бы я положил на консоль:

id1 changed to id2
title1 changed to title2
body1 changed to body2

Для целей того, что я строю, мне не нужно знать изменения значений.Мне просто нужно знать, что id1 стал id2 и т. Д.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Может быть, этого может быть достаточно для цели:

def find_what_changed_in(mhash, result = [])
  result << mhash
  return if mhash.keys == [:append, :remove]
  mhash.keys.each { |k| find_what_changed_in(mhash[k], result) }
  result.last
end

find_what_changed_in(changes)

#=> {:append=>{"id2"=>1, "title2"=>"Test", "body2"=>"Test"}, :remove=>{"id1"=>1, "title1"=>"Test", "body1"=>"Test"}}

Где:

changes =   {:update=> 
    {"suggestions" => 
        {:update=>
          {0=>
            {:append=>
                {"id2"=>1, "title2"=>"Test", "body2"=>"Test"}, 
             :remove=>
                {"id1"=>1, "title1"=>"Test", "body1"=>"Test"}, 
...
0 голосов
/ 17 ноября 2018

За исключением случаев, когда вы выполняете передачу ключей, невозможно сказать, что id1 был заменен на id2 и title2 на title1, или что id1 стало title1 и id2 стало title2. Похоже, вам нужна определенная логика, связанная с фактическими именами ключей (в этом примере поиск различных целочисленных суффиксов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...