정보

JSON 통신

우왕차 2024. 12. 5. 21:20

JSON(JavaScript Object Notation)

JSON은 데이터의 형식이다. Key : Value의 형식으로 정의되어있으며 데이터 통신을 위해서 널리 사용된다.

 

JSON 예시 코드

{
  "name": "홍길동",
  "age": 25,
  "isStudent": true,
  "hobbies": ["독서", "운동", "여행"],
  "address": {
    "city": "서울",
    "district": "강남구"
  }
}

 

 

JSON 사용방식

json을 사용하는 방식은 2가지로 분류할 수 있다.

 

1. 직렬화(Serialization)

직렬화는 데이터를 JSON형식으로 변환하는 방식이다.

순서는 이러하다 : Dart 객체 -> Map -> String

import 'dart:convert';

void Encoded() {
  // 1. Dart 객체 생성 (Map)
  Map<String, dynamic> user = {
    'name': 'Alice',
    'age': 30,
    'isStudent': false,
  };

  // 2. Dart 객체를 JSON 문자열로 변환
  String jsonString = jsonEncode(user);
  
  // 결과 출력
  print('Dart 객체: $user'); // Dart 객체: {name: Alice, age: 30, isStudent: false}
  print('JSON 문자열: $jsonString'); // JSON 문자열: {"name":"Alice","age":30,"isStudent":false}
}

 

맨처음에 객체들을 Map형식으로 정의 해줍니다. key값은 String이여야하고, value는 데이터형이 다를 수 있으므로 dynamic으로 정의 합니다. 그리고 jsonEncode함수를 이용해서 Map형식을 jSON 형식으로 변환해줍니다.

 

 

2. 역직렬화(Deserialization) 

역직렬화는 JSON데이터를 사용가능한 객체로 변환하는 방식입니다.

순서는 직렬화의 반대입니다.

import 'dart:convert';

void Decoded() {
  // 1. JSON 문자열 생성
  String jsonString = '{"name":"Alice","age":30,"isStudent":false}';

  // 2. JSON 문자열을 Dart 객체로 변환
  Map<String, dynamic> user = jsonDecode(jsonString);
  
  // 결과 출력
  print('JSON 문자열: $jsonString'); // JSON 문자열: {"name":"Alice","age":30,"isStudent":false}
  print('Dart 객체: $user'); // Dart 객체: {name: Alice, age: 30, isStudent: false}
}

 

가장먼저 JSON데이터를 가져옵니다. 그리고 jsonDecode 함수를 이용해서 Map형태의 객체로 바꾸어줍니다. 그리고 나서 객체를 이용하면 됩니다.

 

 

 

3. 클래스 이용방법

클래스를 사용할때는 약간 방식이 달라집니다. 클래스에는 json에서 가져올 데이터를 미리 정의 해놓아야합니다.

 

class User {
  final String name;
  final int age;
  final List<String> hobbies;

  User({
    required this.name,
    required this.age,
    required this.hobbies,
  });

  // JSON에서 객체로 변환
  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
      hobbies: List<String>.from(json['hobbies']),
    );
  }

  // 객체에서 JSON으로 변환
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
      'hobbies': hobbies,
    };
  }
}

위 코드처럼 클래스에서 선언을 해놓고 이를 json데이터를 각 속성에 대입을 해줍니다.

void main(){
// JSON 문자열
  String jsonString = '{"name":"Alice","age":30,"isStudent":false}';

  // 2. JSON 문자열을 Dart 객체로 변환
  Map<String, dynamic> userMap = jsonDecode(jsonString);
  User user = User.fromJson(userMap)
  }

 

User user = User.formJson(userMap) 을 보면 map으로 변환한 json데이터를 User클래스에 대입해서 사용하는 것이다.

 

 

 

JSON통신은 매우 많이 사용하는 방식이기때문에 잘 알아두는 것이 중요하다고 생각이 들어서, 이렇게 정리해보았다. 이해한거같아도, 이렇게 글로 정리하려니 용어가 많이 햇갈렸다.직렬화, 역직렬화, 디코딩, 인코딩 등 그렇지만 정리를 하면서 개념과 방식이 정리되어 역시 글로 정리하는 것이 공부에 많이 도움이 된거같다.Json은 학생때부터 워낙 많이 접한 단어여서 알고 싶었는데 이번 기회로 개념을 잘 알게 되었다.

'정보' 카테고리의 다른 글

모바일 빌드 포멧  (0) 2024.12.19
MVVM패턴, MVC패턴  (1) 2024.12.03
git 사용해보기  (0) 2024.10.24