Соедините два JSON на основе элемента ID, используя Python - PullRequest
0 голосов
/ 04 мая 2020

У меня есть два JSON. Один из них имеет следующие записи:

one. json

"data": [
        {
            "results": {
                "counties": {
                    "32": 0, 
                    "96": 0, 
                    "12": 0
                }, 
                "cities": {
                    "total": 32, 
                    "reporting": 0
                }
            }, 
            "element_id": 999
        }, 

Другой имеет следующие записи:

two. json

"data": [
        { 
            "year": 2020, 
            "state": "Virginia", 
            "entries": [
                {
                    "first_name": "Robert", 
                    "last_name": "Smith", 
                    "entry_id": 15723, 
                    "pivot": {
                        "county_id": 32, 
                        "element_id": 999
                    }
                }, 
                {
                    "first_name": "Benjamin", 
                    "last_name": "Carter", 
                    "entry_id": 15724, 
                    "pivot": {
                        "county_id": 34,
                        "element_id": 999
                    }
                }
            ], 
            "element_id": 999,
        },

Я хочу присоединиться к одному. json к двум. json на основе element_id. У JSON есть множество element_id с, поэтому есть элемент поиска подходящего для добавления. Есть ли способ использовать append, чтобы сделать это на основе element_id без необходимости использовать для l oop? Добавленная версия второго JSON выше выглядела бы так:

присоединился. json

"data": [
        { 
            "year": 2020, 
            "state": "Washington", 
            "entries": [
                {
                    "first_name": "Robert", 
                    "last_name": "Smith", 
                    "entry_id": 15723, 
                    "pivot": {
                        "county_id": 32, 
                        "element_id": 999
                    }
                }, 
                {
                    "first_name": "Benjamin", 
                    "last_name": "Carter", 
                    "entry_id": 15724, 
                    "pivot": {
                        "county_id": 34,
                        "element_id": 999
                    }
                }
            ], 
            "element_id": 999,
                {
                    "results": {
                        "counties": {
                            "32": 0, 
                            "96": 0, 
                            "12": 0
                    }, 
                    "cities": {
                        "total": 32, 
                        "reporting": 0
                    }
                },
        },

Что у меня есть до сих пор:

for item in one:
    #this goes through one and saves each unique item in a couple variables
    temp_id = item["element_id"]
    temp_datachunk = item

    #then I try to find those variables in two and if I find them, I append
    for data in two:
        if data["element_id"] == temp_id:
            full_data = data.append(item)
            print(full_data)

Прямо сейчас моя попытка умирает в append. Я получаю AttributeError: 'dict' object has no attribute 'append'.

1 Ответ

0 голосов
/ 04 мая 2020

Примерно так должно работать:

source = '''
[{
    "results": {
        "counties": {
            "32": 0,
            "96": 0,
            "12": 0
        },
        "cities": {
            "total": 32,
            "reporting": 0
        }
    },
    "element_id": 999
}]
'''
target = """
[{
    "year": 2020,
    "state": "Virginia",
    "entries": [{
            "first_name": "Robert",
            "last_name": "Smith",
            "entry_id": 15723,
            "pivot": {
                "county_id": 32,
                "element_id": 999
            }
        },
        {
            "first_name": "Benjamin",
            "last_name": "Carter",
            "entry_id": 15724,
            "pivot": {
                "county_id": 34,
                "element_id": 999
            }
        }
    ],
    "element_id": 999
}]
"""

source_j = json.loads(source)
target_j = json.loads(target)
jsonpath_expr = parse('$..element_id')
source_match = jsonpath_expr.find(source_j)
target_match = jsonpath_expr.find(target_j)
if source_match[0].value==target_match[0].value:
    final = target_j+source_j
    print(final)

Вывод объединенный json.

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