본문 바로가기
공부/python

[json 조작] 2개의 json에서 같은 key가 있으면 value합치기

by 고기 2023. 12. 25.

기록용으로 남겨둔다.

비슷한 형식의 여러 개의 json이 있을 때 같은 key에 대해 value를 더해서 하나의 json으로 만드는 작업이 필요했다.

 

'''
[99] json 항목별 개수 더하기 test
'''
# Test용 JSON 데이터 1
json_a = {
    "characterItemInfo": {
        "equip": {
            "1": ["매커네이터 펜던트", 1, ".\\data\\character\\item_image\\equip\\매커네이터 펜던트"],
            "2": ["강화된 검", 1, ".\\data\\character\\item_image\\equip\\강화된 검"],
        },
        "use": {
            "1": ["마나 물약", 3, ".\\data\\character\\item_image\\use\\마나 물약"],
            "2": ["회복 물약", 2, ".\\data\\character\\item_image\\use\\회복 물약"],
        },
        "etc": {
            "1": ["고대의 문양", 5, ".\\data\\character\\item_image\\etc\\고대의 문양"],
        },
        "setup": {
            "1": ["로얄 소파", 1, ".\\data\\character\\item_image\\setup\\로얄 소파"],
        },
        "cash": {
            "1": ["스타 이어링", 1, ".\\data\\character\\item_image\\cash\\스타 이어링"],
            "2": ["화려한 왕관", 1, ".\\data\\character\\item_image\\cash\\화려한 왕관"],
        }
    }
}

# Test용 JSON 데이터 2
json_b = {
    "characterItemInfo": {
        "equip": {
            "1": ["매커네이터 펜던트", 1, ".\\data\\character\\item_image\\equip\\매커네이터 펜던트"],
            "2": ["흑룡의 갑옷", 1, ".\\data\\character\\item_image\\equip\\흑룡의 갑옷"],
            "3": ["금광 마법봉", 2, ".\\data\\character\\item_image\\equip\\금광 마법봉"],
        },
        "use": {
            "1": ["경험치 부스터", 1, ".\\data\\character\\item_image\\use\\경험치 부스터"],
            "2": ["신속의 부적", 3, ".\\data\\character\\item_image\\use\\신속의 부적"],
        },
        "etc": {
            "1": ["고급 마법서", 2, ".\\data\\character\\item_image\\etc\\고급 마법서"],
        },
        "setup": {
            "1": ["금빛 책상", 1, ".\\data\\character\\item_image\\setup\\금빛 책상"],
            "2": ["푸른 의자", 1, ".\\data\\character\\item_image\\setup\\푸른 의자"],
        },
        "cash": {
            "1": ["감탄 표시", 1, ".\\data\\character\\item_image\\cash\\감탄 표시"],
            "2": ["신비로운 모자", 1, ".\\data\\character\\item_image\\cash\\신비로운 모자"],
        }
    }
}

# Test용 JSON 데이터 3
json_c = {
    "characterItemInfo": {
        "equip": {
            "1": ["화염의 지팡이", 1, ".\\data\\character\\item_image\\equip\\화염의 지팡이"],
            "2": ["금광 마법봉", 2, ".\\data\\character\\item_image\\equip\\금광 마법봉"],
        },
        "use": {
            "1": ["독약", 2, ".\\data\\character\\item_image\\use\\독약"],
            "2": ["마력 회복 물약", 1, ".\\data\\character\\item_image\\use\\마력 회복 물약"],
        },
        "etc": {
            "1": ["구원의 기도서", 3, ".\\data\\character\\item_image\\etc\\구원의 기도서"],
            "2": ["고급 마법서", 1, ".\\data\\character\\item_image\\etc\\고급 마법서"],
        },
        "setup": {
            "1": ["푸른 의자", 1, ".\\data\\character\\item_image\\setup\\푸른 의자"],
        },
        "cash": {
            "1": ["천사 날개", 1, ".\\data\\character\\item_image\\cash\\천사 날개"],
        },
        "test": {
            "1": ["test", 1, "\\test"]
        }
    }
}

def merge_item_data(json_list):
    merged_data = {}

    for json_data in json_list:
        for category, category_data in json_data["characterItemInfo"].items():
            if category not in merged_data:
                merged_data[category] = {}
                
            for key, item_data in category_data.items():
                name, count, image_src = item_data
                
                if name not in merged_data[category]:
                    merged_data[category][name] = [count, image_src]
                else:
                    merged_data[category][name][0] += count

    #return {"characterItemInfo": merged_data}
    return merged_data

merge_data = []
merge_data.append(json_a)
merge_data.append(json_b)
merge_data.append(json_c)

# JSON 데이터 합치기
merged_json = merge_item_data(merge_data)

#for category, category_data in merged_json["characterItemInfo"].items():
for category, category_data in merged_json.items():
    print(category)
    
    for key, item_data in category_data.items():
        count, image_src = item_data
        print(key)
        print(count, image_src)
        
    print()
    
print(merged_json)
print()
print(merged_json["equip"])
print()
print(merged_json["use"])
print()
print(merged_json["etc"])
print()
print(merged_json["setup"])
print()
print(merged_json["cash"])
print()
print(merged_json["test"])

 

출력해보면 다음과 같은 결과가 나온다.

 

끝!

댓글