Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.08.2022
Сообщений: 3

Парсинг Json. Запись различий в словарь

15.01.2023, 14:58. Показов 6452. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите пожалуйста с финалом кода. У меня проблема, что не могу записать различие значений из словарей в новый пустой словарь.

Вот сам код:

Данные самих json:

old_json = {"company_id": 111111, "resource": "record", "resource_id": 406155061, "status": "create", "data": {"id": 11111111, "company_id": 111111, "services": [{"id": 9035445, "title": "\u0421\u0442\u0440\u0438\u0436\u043a\u0 430", "cost": 1500, "cost_per_unit": 1500, "first_cost": 1500, "amount": 1}], "goods_transactions": [], "staff": {"id": 1819441, "name": "\u041c\u0430\u0441\u0442\u0435\u044 0"}, "client": {"id": 130345867, "name": "\u041a\u043b\u0438\u0435\u043d\u044 2", "phone": "79111111111", "success_visits_count": 2, "fail_visits_count": 0}, "clients_count": 1, "datetime": "2022-01-25T11:00:00+03:00", "create_date": "2022-01-22T00:54:00+03:00", "online": false, "attendance": 0, "confirmed": 1, "seance_length": 3600, "length": 3600, "master_request": 1, "visit_id": 346427049, "created_user_id": 10573443, "deleted": false, "paid_full": 0, "last_change_date": "2022-01-22T00:54:00+03:00", "record_labels": "", "date": "2022-01-22 10:00:00"}}

new_json = {"company_id": 111111, "resource": "record", "resource_id": 406155061, "status": "create", "data": {"id": 11111111, "company_id": 111111, "services": [{"id": 22222225, "title": "\u0421\u0442\u0440\u0438\u0436\u043a\u0 430", "cost": 1500, "cost_per_unit": 1500, "first_cost": 1500, "amount": 1}], "goods_transactions": [], "staff": {"id": 1819441, "name": "\u041c\u0430\u0441\u0442\u0435\u044 0"}, "client": {"id": 130345867, "name": "\u041a\u043b\u0438\u0435\u043d\u044 2", "phone": "79111111111", "success_visits_count": 2, "fail_visits_count": 0}, "clients_count": 1, "datetime": "2022-01-25T13:00:00+03:00", "create_date": "2022-01-22T00:54:00+03:00", "online": false, "attendance": 2, "confirmed": 1, "seance_length": 3600, "length": 3600, "master_request": 1, "visit_id": 346427049, "created_user_id": 10573443, "deleted": false, "paid_full": 1, "last_change_date": "2022-01-22T00:54:00+03:00", "record_labels": "", "date": "2022-01-22 10:00:00"}}





Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import json
 
with open('json_old.json', 'r') as f:
    old_json = json.loads(f.read())
with open('json_new.json', 'r') as ff:
    new_json = json.loads(ff.read())
 
diff_list = ["services", "staff", "datetime"]
result_dict = {}
 
def find_key(struct, key_i):
    result = None
    if key_i in struct:
        return struct[key_i]
 
    for sub_struct in struct.values():
        if isinstance(sub_struct, dict):
            result = find_key(sub_struct, key_i)
            if result:
                break
 
        if isinstance(sub_struct, list):
            result = find_key(sub_struct, key_i)
            if result:
                break
 
        else:
            result = None
 
    return result
 
for key in diff_list:
    old_value = find_key(old_json, key)
    new_value = find_key(new_json, key)

Помогите пожалуйста, как записать различия между old_value и new_value в словарь в таком виде:
{'services': [{'id': 22222225, 'title': 'Стрижка', 'cost': 1500, 'cost_per_unit': 1500, 'first_cost': 1500, 'amount': 1}], 'datetime': '2022-01-25T13:00:00+03:00'}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2023, 14:58
Ответы с готовыми решениями:

Парсинг JSON И запись в БД
Добрый день/вечер! Помогите, пожалуйста, с таким вопросом: Есть Джанго-приложение с БД на Постгрес. В базе хранятся данные, собранные...

Сравнить 2 Memo на предмет наличия в них различий и подсчитать количество этих различий
Клавиатурный тренажёр ввода текста. Вообщем есть Memo1 в который из текстового файла загружается текст, в Memo2 пользователь должен вводить...

Сжатие и запись файлов с учётом различий в скорости дисков
Пишу многопоточный архиватор gz-шник(а точнее уже написал) с помощью GZipStream. Поток на "чтение" бьёт на блоки сорсный файл и...

5
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2023, 16:31
old
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
   "company_id":111111,
   "resource":"record",
   "resource_id":406155061,
   "status":"create",
   "data":{
      "id":11111111,
      "company_id":111111,
      "services":[
         {
            "id":9035445,
            "title":"\u0421\u0442\u0440\u0438\u0436\u043a\u0430",
            "cost":1500,
            "cost_per_unit":1500,
            "first_cost":1500,
            "amount":1
         }
      ],
      "goods_transactions":[
         
      ],
      "staff":{
         "id":1819441,
         "name":"\u041c\u0430\u0441\u0442\u0435\u0440"
      },
      "client":{
         "id":130345867,
         "name":"\u041a\u043b\u0438\u0435\u043d\u0442",
         "phone":"79111111111",
         "success_visits_count":2,
         "fail_visits_count":0
      },
      "clients_count":1,
      "datetime":"2022-01-25T11:00:00+03:00",
      "create_date":"2022-01-22T00:54:00+03:00",
      "online":false,
      "attendance":0,
      "confirmed":1,
      "seance_length":3600,
      "length":3600,
      "master_request":1,
      "visit_id":346427049,
      "created_user_id":10573443,
      "deleted":false,
      "paid_full":0,
      "last_change_date":"2022-01-22T00:54:00+03:00",
      "record_labels":"",
      "date":"2022-01-22 10:00:00"
   }
}


new
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
   "company_id":111111,
   "resource":"record",
   "resource_id":406155061,
   "status":"create",
   "data":{
      "id":11111111,
      "company_id":111111,
      "services":[
         {
            "id":22222225,
            "title":"\u0421\u0442\u0440\u0438\u0436\u043a\u0430",
            "cost":1500,
            "cost_per_unit":1500,
            "first_cost":1500,
            "amount":1
         }
      ],
      "goods_transactions":[
         
      ],
      "staff":{
         "id":1819441,
         "name":"\u041c\u0430\u0441\u0442\u0435\u0440"
      },
      "client":{
         "id":130345867,
         "name":"\u041a\u043b\u0438\u0435\u043d\u0442",
         "phone":"79111111111",
         "success_visits_count":2,
         "fail_visits_count":0
      },
      "clients_count":1,
      "datetime":"2022-01-25T13:00:00+03:00",
      "create_date":"2022-01-22T00:54:00+03:00",
      "online":false,
      "attendance":2,
      "confirmed":1,
      "seance_length":3600,
      "length":3600,
      "master_request":1,
      "visit_id":346427049,
      "created_user_id":10573443,
      "deleted":false,
      "paid_full":1,
      "last_change_date":"2022-01-22T00:54:00+03:00",
      "record_labels":"",
      "date":"2022-01-22 10:00:00"
   }
}


Добавлено через 1 минуту
Меняется только ключ [data][services]?

Добавлено через 3 минуты
Python
1
2
3
4
services_ids = [i['data']['services']['id'] for i in old_value]
for i in new_value:
    if i['data']['services']['id'] not in services_ids:
        print(i['data']['services'])
0
0 / 0 / 0
Регистрация: 16.08.2022
Сообщений: 3
15.01.2023, 17:13  [ТС]
Рыжий Лис, Здравствуйте. Код заключается не просто в выводе этих данных. Сейчас скину объяснение всей задачи:

Найдите различия между двумя JSON-файлами. Если различающиеся параметры входят в diff_list, выведите различие. Иными словами, вам нужно отловить изменение определённых параметров и вывести значение: что изменилось и на что. Набор ключей в обоих файлах идентичный, различаются лишь значения.

Напишите программу, которая:

-загружает данные из двух предложенных JSON-файлов (находятся в репозитории);
-выполняет сравнение параметров, указанных в diff_list;
-формирует результат в виде словаря;
записывает словарь в JSON-файл с названием result.json.

В консоли должно вывестись следующее сообщение:

{'services': [{'id': 22222225, 'title': 'Стрижка', 'cost': 1500, 'cost_per_unit': 1500, 'first_cost': 1500, 'amount': 1}], 'datetime': '2022-01-25T13:00:00+03:00'}
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2023, 17:14
Цитата Сообщение от alxndrshii Посмотреть сообщение
Код заключается не просто в выводе этих данных.
А самому код написать? Или вы только способны ставить задачи анонимам из интернета?
0
0 / 0 / 0
Регистрация: 16.08.2022
Сообщений: 3
15.01.2023, 17:16  [ТС]
Рыжий Лис, Код я весь написал, у меня проблема только с записью различий этих словарей в отдельный словарь.
0
0 / 0 / 0
Регистрация: 02.02.2023
Сообщений: 1
02.02.2023, 21:09
result_dict = {}

...

if not old_value == new_value:
res_dict[key] = new_value

...

with open('result.json', 'w') as f:
json.dump(res_dict, f)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2023, 21:09
Помогаю со студенческими работами здесь

Парсинг JSON в JSON Linked Data с использованием Hydra Java
Есть веб страница, на которой пользователь заполняет поля, жмет на кнопку и затем данные отправляются на сервер. На сервере работает...

Парсинг Json через Json.N - отсутствует доступ к JObject
Здравствуйте, помогите распарсить Json через Json.N Сделал вот так Dim respone As String =...

Парсинг JSON с short.pub посредством NewtonSoft.Json
Доброго времени суток. Имеется сокращалка сайтов short.pub, у которой есть API, который возвращает JSON, содержащий сокращённые ссылки...

Парсинг JSON ответа. Парсинг строки с массивами
public class LocationData { public double Center { get; set; } } public class Field : IField ...

Парсинг JSON ответа. Парсинг строки с массивами
Есть ответ с сервера в виде json: ,\"Polygon\":,]}", "OrganizationId": 2, "SyncDate": "2021-01-20T11:23:42.007" ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru