Сравните JSON с регулярным выражением в Python - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть множество тестовых случаев / событий (файлов JSON), которые мне нужно сравнить и показать любые изменения.Итак, я дважды запустил события и заменил все изменения регулярным выражением.Мне нужно написать полный скрипт на Python, который при запуске проверяет все пары ключ / значение и дает мне знать, что изменилось.Я много искал, но не могу найти то, что искал.

Ниже приведен фрагмент моих файлов JSON, оригинал и с регулярным выражением:

{
  "_index": "activities-2019-09-05-000001",
  "_type": "ActivityRecordsType",
  "_id": "E0E6DD54-9AF1-DAE6-A80D-BC58C52F14C1::96864DBA-E8C1-44DC-B083-502679E35167",
  "_version": 1,
  "_score": null,
  "_source": {
    "Destination_File_Drive_Encryption": "No Encryption Detected",
    "Source_File_Hash_Digest": "4bfa69b2d340292d48842b84352ba9d3aa49e077"
    }
}
{
  "_index": "activities-\\d{4}-\\d{2}-\\d{2}-000001",
  "_type": "ActivityRecordsType",
  "_id": "E0E6DD54-9AF1-DAE6-A80D-BC58C52F14C1::\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})",
  "_version": 1,
  "_score": null,
  "_source": {
    "Destination_File_Drive_Encryption": "No Encryption Detected",
    "Source_File_Hash_Digest": "\\w{40}"
    }
}

Может ли кто-нибудь дать мне правильное решение этой проблемы?Конечно, я мог бы написать функцию, чтобы определить, равны ли они в соответствии с ключами каждого значения.Но я думаю, что мог бы быть лучший способ сделать это, особенно с вовлеченным регулярным выражением.Примерно так:

def match_dicts(self, baseline_event, actual_event):
    match = False
    mismatch_count = 0
    for baseline_key in baseline_event:
        #print baseline_key
        if baseline_key in actual_event:
            #print baseline_key
            base_txt = str(baseline_event[baseline_key])
            actual_txt = unicode(actual_event[baseline_key])
            # Checking for plain value attribute
            if base_txt == actual_txt:
                match = True
             # Checking for the non-empty attribute
            elif "[ne]" in base_txt:
                if actual_txt is not None:
                    match = True
                else:
                    mismatch_count += 1

Путем ввода идентификаторов, таких как [e] и [ne]

1 Ответ

0 голосов
/ 23 сентября 2019

я использовал хороший пакет с именем jsondiff

пример:

из jsondiff import diff

diff ({'a': 1, 'b': 2}, {'b': 3, 'c': 4}) {'c': 4, 'b': 3, delete: ['a']}

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