HTTP-1 에서 서버로부터 이런 응답을 받았습니다.
{"userId":1,"id":1,"title":"sunt aut facere...","body":"quia et suscipit..."}
이것이 JSON 형식입니다. 그런데 지금은 그냥 긴 문자열 하나입니다. title 값만 꺼내려면 어떻게 해야 할까요?
JSON(JavaScript Object Notation) 은 데이터를 저장하고 전송하기 위한 텍스트 형식입니다.
핵심:
JSON 은 "이렇게 생긴 문자열" 입니다.
통신 방법도, 프로그래밍 언어도 아닙니다.
서버와 클라이언트가 데이터를 주고받을 때 가장 많이 쓰는 형식입니다.
키-값 쌍으로 이루어집니다.
{
"name": "철수",
"age": 25,
"email": "chulsu@email.com"
}
여러 값의 목록입니다.
["사과", "바나나", "체리"]
중첩 구조
{
"name": "철수",
"hobbies": ["코딩", "독서"],
"address": {
"city": "서울",
"zip": null
}
}
JSON 데이터 타입
| 타입 | 표기법 | 예시 | 주의 |
|---|---|---|---|
| 문자열 | "큰따옴표" | "안녕하세요" | 반드시 큰따옴표 |
| 숫자 | 숫자 그대로 | 42, 3.14 | |
| 불리언 | 소문자 | true, false | 소문자만 |
| null | 소문자 | null | 소문자만 |
| 객체 | { } | {"key": "value"} | |
| 배열 | [ ] | [1, 2, 3] |
JSON Object vs JSON Array 구분

// JSON Object - { 로 시작 → 단건 데이터
{
"id": 1,
"title": "Java 공부"
}
// JSON Array - [ 로 시작 → 목록 데이터
[
{"id": 1, "title": "Java 공부"},
{"id": 2, "title": "Spring 공부"},
{"id": 3, "title": "DB 공부"}
]
JSON 형식에 텍스트를 자바 언어에서 사용하는 데이터 타입으로 직접 변환
package http.json;
public class NotJsonEx {
public static void main(String[] args) {
// HTTP 통신으로 json 형식 데이터를 받았다고 가정.
// json 형식은 자바에서 문자열로 취급 됨.
String json = "{ \"name\" : \"철수\", \"age\": 25 }";
// 위 json 형식에 문자열을 우리 프로그램 내에서 사용을 하려면 파싱을 처리를 해야한다.
// 단계 1 : 불필요한 기호 제거 (replace 사용)
// 중괄호와 큰 따옴표 아무것도 없는 상태("")로 만들어 본다.
String step1 = json.replace("{", "").replace("}", "");
System.out.println(step1);
// 단계 2 : 항목별 자르기 (split 사용)
String[] parts = step1.split(",");
System.out.println("size : " + parts.length);
System.out.println(parts[0]);
System.out.println(parts[1]);
// 단계 3 : 데이터 추출 및 할당
// 첫번째 조각에서 "name":"철수" 기준에서 철수라는 값을 추출 ( : ) 기준
String nameValue = (parts[0].split(":"))[1];
System.out.println(nameValue);
// 두번째 조각에서 "age":25 에서 25를 추출
String ageString = parts[1].split(":")[1];
System.out.println(ageString);
int ageValue = Integer.parseInt(ageString.trim());
System.out.println(ageValue);
// 단계 4 자바 프로그램에서 이해하는 데이터 타입 -> 객체로 변환
// 객체 생성
User user = new User(nameValue, ageValue);
System.out.println(user.toString());
}
} // end of class
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}