본문 바로가기
Dart/Dart Server

[초급] Dart Server JSON 처리 및 데이터 직렬화/JSON 데이터를 다루는 기본 방법

by Maccrey Coding 2024. 9. 6.
728x90
반응형

 

Dart에서 JSON(JavaScript Object Notation) 데이터 처리는 서버와 클라이언트 간의 데이터 교환에서 매우 중요한 역할을 합니다. JSON은 데이터 포맷으로 널리 사용되며, 가볍고 인간이 읽기 쉬운 구조를 가지고 있습니다.

이 블로그에서는 Dart에서 JSON을 다루는 기본 방법과 데이터 직렬화 방법에 대해 초보자도 이해할 수 있도록 자세히 설명하겠습니다.

1. JSON 기본 개념

JSON은 데이터를 구조화하여 저장하고 전송하는 포맷입니다. JSON 데이터는 객체와 배열로 구성되며, 다음과 같은 형식을 가지고 있습니다.

  • 객체: { "key": "value", "key2": "value2" }
  • 배열: [ "value1", "value2", "value3" ]

JSON은 키-값 쌍으로 데이터를 표현하며, 문자열, 숫자, 불리언, 배열, 객체 등을 지원합니다.

2. Dart에서 JSON 데이터 처리하기

Dart에서 JSON 데이터를 처리하기 위해서는 dart:convert 라이브러리를 사용합니다. 이 라이브러리는 JSON 데이터를 인코딩하고 디코딩하는 기능을 제공합니다.

2.1 JSON 디코딩

JSON 문자열을 Dart 객체로 변환하려면 jsonDecode 함수를 사용합니다. 이 함수는 JSON 문자열을 받아서 Dart의 Map 또는 List로 변환합니다.

예제: JSON 문자열을 Dart 객체로 변환하기

import 'dart:convert';

void main() {
  // JSON 문자열
  var jsonString = '{"name": "John", "age": 30}';

  // JSON 디코딩
  var user = jsonDecode(jsonString);

  // Dart 객체로 변환된 결과 출력
  print('Name: ${user['name']}'); // 결과: Name: John
  print('Age: ${user['age']}');   // 결과: Age: 30
}

이 예제에서 jsonDecode를 사용하여 JSON 문자열을 Dart의 Map 객체로 변환합니다. 변환된 객체에서 키를 사용하여 값을 접근할 수 있습니다.

2.2 JSON 인코딩

Dart 객체를 JSON 문자열로 변환하려면 jsonEncode 함수를 사용합니다. 이 함수는 Dart 객체를 JSON 문자열로 변환합니다.

예제: Dart 객체를 JSON 문자열로 변환하기

import 'dart:convert';

void main() {
  // Dart 객체
  var user = {'name': 'John', 'age': 30};

  // JSON 인코딩
  var jsonString = jsonEncode(user);

  // JSON 문자열로 변환된 결과 출력
  print(jsonString); // 결과: {"name":"John","age":30}
}

이 예제에서는 Dart 객체를 jsonEncode 함수를 사용하여 JSON 문자열로 변환합니다. 변환된 문자열은 JSON 형식으로 출력됩니다.

3. 데이터 직렬화와 역직렬화

3.1 데이터 직렬화(jsonEncode)

데이터 직렬화는 Dart 객체를 JSON 문자열로 변환하는 과정입니다. 이 과정은 데이터를 저장하거나 전송할 때 사용됩니다. Dart의 jsonEncode 함수를 사용하여 객체를 직렬화할 수 있습니다.

3.2 데이터 역직렬화( jsonDecode)

데이터 역직렬화는 JSON 문자열을 Dart 객체로 변환하는 과정입니다. 이 과정은 저장된 데이터나 전송된 데이터를 읽어서 사용할 때 필요합니다. Dart의 jsonDecode 함수를 사용하여 JSON 문자열을 역직렬화할 수 있습니다.

4. 간단한 API 서버 구축하기

Dart로 간단한 API 서버를 구축하여 JSON 데이터를 반환하고 처리하는 방법을 살펴보겠습니다.

4.1 JSON 반환 API 예제

다음은 GET 요청에 대해 JSON 데이터를 반환하는 간단한 API 서버 예제입니다.

import 'dart:convert';
import 'dart:io';

void main() async {
  // 서버를 'localhost'의 포트 8080에서 시작합니다.
  var server = await HttpServer.bind('localhost', 8080);
  print('Server listening on port 8080');

  await for (HttpRequest request in server) {
    if (request.uri.path == '/api/user' && request.method == 'GET') {
      // 반환할 JSON 데이터
      var responseData = {'name': 'John', 'age': 30};

      // JSON 데이터 반환
      request.response
        ..headers.contentType = ContentType.json
        ..write(jsonEncode(responseData))
        ..close();
    } else {
      request.response
        ..statusCode = HttpStatus.notFound
        ..write('Not Found')
        ..close();
    }
  }
}

이 서버는 /api/user 경로로 GET 요청을 받을 때 JSON 데이터를 반환합니다. jsonEncode를 사용하여 Dart 객체를 JSON 문자열로 변환하고, ContentType.json 헤더를 설정하여 JSON 형식임을 명시합니다.

4.2 JSON 데이터 처리 API 예제

다음은 POST 요청으로 받은 JSON 데이터를 처리하고 응답하는 API 서버 예제입니다.

import 'dart:convert';
import 'dart:io';

void main() async {
  var server = await HttpServer.bind('localhost', 8080);
  print('Server listening on port 8080');

  await for (HttpRequest request in server) {
    if (request.uri.path == '/api/user' && request.method == 'POST') {
      var content = await utf8.decoder.bind(request).join();
      var requestData = jsonDecode(content);

      var responseData = {'received': requestData};
      request.response
        ..headers.contentType = ContentType.json
        ..write(jsonEncode(responseData))
        ..close();
    } else {
      request.response
        ..statusCode = HttpStatus.notFound
        ..write('Not Found')
        ..close();
    }
  }
}

이 서버는 /api/user 경로로 POST 요청을 받을 때, 클라이언트로부터 받은 JSON 데이터를 처리하고, 이를 다시 JSON 형태로 응답합니다. jsonDecode를 사용하여 JSON 문자열을 Dart 객체로 변환하고, 이를 처리한 후 jsonEncode로 다시 JSON 문자열로 변환하여 응답합니다.

 

Dart에서 JSON 데이터를 처리하는 방법과 데이터 직렬화 및 역직렬화에 대해 알아보았습니다.

JSON 데이터는 서버와 클라이언트 간의 데이터 교환에서 중요한 역할을 하며, dart:convert 라이브러리를 사용하여 손쉽게 처리할 수 있습니다.

간단한 API 서버를 구축하고 JSON 데이터를 반환 및 처리하는 예제를 통해 Dart의 강력한 기능을 활용해 보세요.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

728x90
반응형