Python - JSON, Dictionary 정리(json load and dump)

3 분 소요

파이썬 JSON, Dictionary 정리 - loads(), load(), dumps(), dump()

json 이란?

JSON은 JavaScript 객체 표기법(JavaScript Object Notation)을 뜻합니다. JSON은 서버와 웹 애플리케이션 간의 데이터 교환에 일반적으로 사용되는 경량(lightweight) 데이터 교환 형식이다.

웹 애플리케이션 상에서 정보를 저장하고 전달하는 데 쓰이는 데이터 포맷이다.

이 방법은 네트워크를 통해 쉽게 전송하거나 파일에 저장할 수 있는 형식으로 데이터를 직렬화하려는 경우에 유용하다.


기본 JSON 문법

JSON에서 데이터는 다음과 같이 키(key)-값(value)의 쌍으로 표기한다.

Key(속성)은 “쌍따옴표”로 묶어서 문자열로 표기한다. 숫자도 문자열로 표현된다.

Value(값)은 모든 자료형이 가능하며 자료형에 따라 표기 방법이 달라진다.

"name": "Kim"

JSON object는 {중괄호}로 표기한다. JSON array는 [대괄호]로 표기한다.

{
    "first_name": "Katie",  
    "last_name": "Rodgers"
}

json.loads()

  • json.loads() : JSON 문자열을 파싱하여 Dictionary 의 Key, Value 형태로 변경해준다.

json.load()

  • json.load(파일 객체)

  • JSON 파일을 읽을 때는 json.load()를 사용한다. load() 함수는 읽은 데이터를 Dictionary 자료형으로 반환한다.

    JSON file -> Dictionary

json.dumps()

  • json.dumps() : 파이썬 객체를 JSON 형태로(문자열) 바꿔준다.

  • dumps 메서드는 jsonPython 객체(일반적으로 사전)를 JSON 형식 문자열로 변환하는 데 사용되는 Python 의 라이브러리에서 제공하는 메서드이다.

json.dump()

  • json.dump(Dictionary, 파일 객체)

  • JSON 파일에 write 하는데 사용할 수 있다. Dictionary 자료형을 JSON 파일로 생성할 때는 json.dump(Dictionary, 파일 객체)를 사용한다.

    Dictionary -> JSON file

파이썬에서는 JSON 타입의 데이터를 Dictionary로 주로 처리하고 외부로 전달할 때는 JSON 형태로 바꾸어 전달한다.


예제

예제 설명

json_exam_data 라는 사전(Dictioonary) 타입 데이터를 만든다.

json.dump() : “data.json”이라는 JSON 파일에 사전을 json.dump()쓰는 데 사용한다.

json.load() : “data.json” 파일에서 데이터를 읽고 사전(Dictioonary)타입으로 로드한다.

import json

# Creating a dictionary
json_exam_data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

dumped_data = json.dumps(json_exam_data)
print("dumped_data :: ", dumped_data)
print("dumped_data data type :: ", type(dumped_data))

# Writing the dictionary to a JSON file
with open("data.json", "w") as json_file:
    json.dump(json_exam_data, json_file)

# Reading the JSON file and loading the data back into a dictionary
with open("data.json", "r") as json_file:
    loaded_data = json.load(json_file)

print(loaded_data)
#{'name': 'John', 'age': 30, 'city': 'New York'}
print("loaded_data type :: ", type(loaded_data))
# loaded_data type ::  <class 'dict'>

예제

# Creating a dictionary
student = {
    "name": "Alice",
    "age": 22,
    "major": "Computer Science",
    "gpa": 3.8
}

# Accessing values in the dictionary
print("Name:", student["name"])
print("Age:", student["age"])
print("Major:", student["major"])
print("GPA:", student["gpa"])

# Modifying values in the dictionary
student["age"] = 23
student["gpa"] = 3.9

# Adding a new key-value pair
student["university"] = "XYZ University"

# Deleting a key-value pair
del student["major"]

# Iterating through dictionary keys and values
for key, value in student.items():
    print(key, ":", value)

# Checking if a key exists in the dictionary
if "age" in student:
    print("Age:", student["age"])
else:
    print("Age not found")

# Getting a default value if key is not found
print("Major:", student.get("major", "N/A"))

# Getting all keys and values as lists
keys = list(student.keys())
values = list(student.values())

# Getting the number of key-value pairs in the dictionary
num_entries = len(student)

# Clearing all entries from the dictionary
#student.clear()

# Printing the modified dictionary
print(student)
#{'name': 'Alice', 'age': 23, 'gpa': 3.9, 'university': 'XYZ University'}

’’’ 사전(Dictionary) 형태로 데이터의 구조화된 표현을 만드는 예제 코드 to_dict() 메서드는 객체의 속성을 사전(Dictionary) 형태로 변환하기 위한 커스텀 메서드이다. 일반적으로 개체의 상태를 키-값 쌍의 컬렉션으로 나타내려는 경우에 사용된다.

’’’

예제

class Person:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city
    
    def to_dict(self):
        return {
            "name": self.name,
            "age": self.age,
            "city": self.city
        }


# Creating an instance of the Person class
person = Person("John", 30, "New York")

# Converting the instance to a dictionary using to_dict()
person_dict = person.to_dict()

# Printing the dictionary
print(person_dict)
#{'name': 'John', 'age': 30, 'city': 'New York'}

타입 확인 (Dictionary, JSON 비교) 그리고 “”, ‘’

json string은 ““로 나타낸다.dict는 ‘‘로 나타나는 것을 확인할 수 있다.

JSON에서 큰따옴표(““)는 표준이며 키 및 문자열 값을 정의하는 데 사용한다. JSON에서 작은따옴표(‘‘)를 사용하면 유효한 JSON 구문이 아니다?

요약하면 큰따옴표(““)와 작은따옴표(‘‘)를 모두 사용하여 Python에서 문자열을 정의할 수 있지만 JSON에서는 키와 문자열 값 주위에 큰따옴표를 사용해야 한다. 사전(Dicitionary) 타입으로 작업할 때 키에 두 가지 유형의 따옴표를 사용할 수 있지만 JSON 형식과 일치시키기 위해 큰따옴표(““)를 사용하는 것이 일반적이다.

예제

json_data = {
    "name": "John",
    "age": 30
}

print("json_data :: ", json_data)
print("json_data type :: ", type(json_data))

#json dump
json_dump = json.dumps(json_data)
print("json_string :: ", json_dump)
print("json_data tpye :: ", type(json_dump))

#json load
#dictironary를 json으로 변환
#타입 에러 TypeError: the JSON object must be str, bytes or bytearray, not dict
#json_load = json.loads(json_data)

json_load = json.loads(json_dump)
print("json_load :: ", json_load)
print("json_load type :: ", type(json_load))

출력

json_data ::  {'name': 'John', 'age': 30}
json_data type ::  <class 'dict'>
json_string ::  {"name": "John", "age": 30}
json_data tpye ::  <class 'str'>
json_load ::  {'name': 'John', 'age': 30}
json_load type ::  <class 'dict'>

댓글남기기