JSON이란 | 파이썬에서 json.loads()로 데이터 접근하는 방법

JSON은 데이터 분석이나 API 연동에서 가장 먼저 마주치는 데이터 형식이다.

핵심은 하나다. JSON은 대부분 문자열로 들어오기 때문에 바로 key 접근이 불가능하고, json.loads()로 파싱해야 실제 데이터(dict/list)로 사용할 수 있다.


JSON은 “데이터”가 아니라 “문자열 형식”이다

JSON은 데이터를 담고 있지만, 파이썬 입장에서는 그냥 문자열이다.

json_str = '{"name": "Alice", "age": 25}'

이 상태에서는 dict처럼 보이지만 실제로는 str이다.

type(json_str)
# <class 'str'>

그래서 아래처럼 접근하면 실패한다.

json_str["name"]   # ❌

→ key 접근이 아니라 문자열 인덱싱이기 때문


json.loads()로 “데이터 구조”로 바꿔야 한다

이 문제를 해결하는 게 json.loads()다.

import json

json_str = '{"name": "Alice", "age": 25}'
data = json.loads(json_str)

print(data["name"])   # Alice

이제야 dict처럼 동작한다.

type(data)
# <class 'dict'>

즉,

  • JSON 문자열 → json.loads() → dict/list

이 변환이 핵심이다.


JSON 구조는 dict + list 조합이다

JSON은 단순한 key-value가 아니라 중첩 구조다.

대표 구조는 2가지다:

  • {} → dict
  • [] → list

이 둘이 섞여서 만들어진다.


실제 JSON 구조 예시

import json

json_str = '''
{
  "movie": {
    "title": "Inception",
    "actors": [
      {"name": "Leonardo"},
      {"name": "Joseph"}
    ]
  }
}
'''

data = json.loads(json_str)

중첩 JSON 접근 방식

이 구조를 꺼내는 방식은 항상 동일하다.

data["movie"]["actors"][0]["name"]

접근 순서:

  1. dict → "movie"
  2. dict → "actors"
  3. list → [0]
  4. dict → "name"

👉 핵심 패턴:

key → key → index → key

왜 JSON을 이렇게 이해해야 하는가

이 개념이 중요한 이유는 API 데이터 구조 때문이다.

실제 API 응답은 대부분 이런 형태다:

{
  "response": {
    "items": [
      {...},
      {...},
      {...}
    ]
  }
}

여기서 원하는 값은 보통 이렇게 뽑는다:

data["response"]["items"][0]["필드명"]

즉, JSON을 이해하지 못하면

API 데이터를 꺼내는 단계에서 막힌다.


JSON → DataFrame으로 이어지는 구조

JSON을 다루는 목적은 결국 이거다.

👉 DataFrame으로 변환하기

예시:

import pandas as pd

items = data["response"]["items"]

df = pd.DataFrame(items)
print(df)

이 흐름이 데이터 분석 기본 루트다.

API → JSON 문자열 → json.loads() → dict/list → DataFrame

구현 관점 핵심 포인트

1. JSON은 무조건 문자열로 들어온다

API 응답은 대부분 str이다.


2. json.loads()는 필수 단계다

이거 없이 데이터 접근 불가능하다.


3. 구조 확인이 먼저다

print(data)

이걸 안 보면 접근 못 한다.


4. 접근은 항상 단계적으로 한다

data["a"]["b"][0]["c"]

5. 목적은 DataFrame 변환이다

JSON은 중간 단계일 뿐이다.


자주 하는 실수

❌ 바로 key 접근

json_str["key"]

❌ 구조 확인 안 하고 접근

data["items"]   # 구조 다르면 바로 에러

한 줄 정리

JSON은 문자열이기 때문에 json.loads()로 dict/list 구조로 변환해야 실제 데이터처럼 접근할 수 있다.