본문 바로가기
공부/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"])

 

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

 

끝!

댓글