сравнение значений ключей двух файлов json

ratata

Новичок
Пользователь
Дек 29, 2021
37
1
8
Есть два json файла с ключами и значениями. Нужно сравнить key1 двух файлов и если значения равны, то сделать разницу между значениями key2 двух файлов

Python:
file1.json
[
    {
        "key1": "KARA",
        "key2": "10",
    }
]

file2.json
{
    "code": 200,
    "data": [
        {
            "key1": "KARA"
            "key2": "13",

        }
    ]
}

То есть если значение key1 (file1.json) == значение key1 (file2.json), будет осуществляться: (file1.json) значение key2 - (file2.json) значение key2
(10 - 13)
Вывод в терминал:
-3
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
То есть если значение key1 (file1.json) == значение key1 (file2.json), будет осуществляться: (file1.json) значение key2 - (file2.json) значение key2
(10 - 13)
Вывод в терминал:
-3
Вот пример:
file1.json
JSON:
[
    {
        "key1": "KARA",
        "key2": "10"
    }
]
file2.json
JSON:
{
    "code": 200,
    "data": [
        {
            "key1": "KARA",
            "key2": "13"
        }
    ]
}
Python:
import json


with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    if json1[0]['key1'] == json2['data'][0]['key1']:
        print(int(json1[0]['key2']) - int(json2['data'][0]['key2']))  # -3
 
  • Мне нравится
Реакции: ratata

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
если я делаю больше одного элемента, то
В терминале выдает ошибку:
В файле .json должен быть один корневой элемент, а остальные вложенными в него.
file1.json
JSON:
[
    [
        {
            "key1": "KARA",
            "key2": "10"
        }   
    ],
    [
        {

            "key1": "SARA",
            "key2": "23"

        }
    ]
]
file2.json
JSON:
[
    {
        "code": 200,
        "data": [
            {
                "key1": "KARA",
                "key2": "13"
            }
        ]
    },
    {

        "code": 200,
        "data": [
            {
                "key1": "CRACK",
                "key2": "4"
            }
        ]
    }
]
Python:
import json


with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    if json1[0][0]['key1'] == json2[0]['data'][0]['key1']:
        print(int(json1[0][0]['key2']) - int(json2[0]['data'][0]['key2']))  # -3
 
  • Мне нравится
Реакции: ratata

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Хорошо, спасибо большое, но как тогда мне поменять эти json файлы?
Я выше привел пример. Нужно добавить корневой элемент, а все вложенные элементы разделить запятыми. Проверить что json получился корректный можно в любом онлайн валидаторе: ссылка. Скопируйте туда свой json и нажмите проверить. Если ошибок нет значит json валидный и код с ним будет работать.
 
  • Мне нравится
Реакции: ratata

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
with open('file1.json') as f, open('file2.json') as f2:
мне так для общего развития, указывается ли кодировка в json?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
мне так для общего развития, указывается ли кодировка в json?
Как и для любого другого файла можно указать кодировку:
Python:
with open('file1.json', encoding='utf-8') as f, open('file2.json', encoding='utf-8') as f2:
    ...
 

ratata

Новичок
Пользователь
Дек 29, 2021
37
1
8
Вот пример:
file1.json
JSON:
[
    {
        "key1": "KARA",
        "key2": "10"
    }
]
file2.json
JSON:
{
    "code": 200,
    "data": [
        {
            "key1": "KARA",
            "key2": "13"
        }
    ]
}
Python:
import json


with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    if json1[0]['key1'] == json2['data'][0]['key1']:
        print(int(json1[0]['key2']) - int(json2['data'][0]['key2']))  # -3
спасибо, это помогло, но если я делаю больше одного элемента, то есть, например:

file1.json
Python:
[

    {

        "key1": "KARA",

        "key2": "10"

    }

][

    {

        "key1": "SARA",

        "key2": "23"

    }

]

file2.json

Python:
{

    "code": 200,

    "data": [

        {

            "key1": "KARA",

            "key2": "13"

        }

    ]

}{

    "code": 200,

    "data": [

        {

            "key1": "CRACK",

            "key2": "4"

        }

    ]

}

В терминале выдает ошибку:

Код:
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 23 column 2 (char 629)

Как быть, подскажи пожалуйста
 

ratata

Новичок
Пользователь
Дек 29, 2021
37
1
8
В файле .json должен быть один корневой элемент, а остальные вложенными в него.
file1.json
JSON:
[
    [
        {
            "key1": "KARA",
            "key2": "10"
        }  
    ],
    [
        {

            "key1": "SARA",
            "key2": "23"

        }
    ]
]
file2.json
JSON:
[
    {
        "code": 200,
        "data": [
            {
                "key1": "KARA",
                "key2": "13"
            }
        ]
    },
    {

        "code": 200,
        "data": [
            {
                "key1": "CRACK",
                "key2": "4"
            }
        ]
    }
]
Python:
import json


with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    if json1[0][0]['key1'] == json2[0]['data'][0]['key1']:
        print(int(json1[0][0]['key2']) - int(json2[0]['data'][0]['key2']))  # -3
Хорошо, спасибо большое, но как тогда мне поменять эти json файлы?
 

Форум IT Специалистов