Dart에서 JSON 데이터를 처리하는 것은 웹 개발 및 데이터 통신에서 매우 중요한 작업입니다.
dart:convert 라이브러리는 JSON 데이터를 인코딩하고 디코딩하는 데 필요한 강력한 도구를 제공합니다.
이 블로그에서는 dart:convert 라이브러리를 사용하여 JSON 데이터를 처리하는 방법을 초보자도 쉽게 이해할 수 있도록 설명합니다.
1. JSON 인코딩과 디코딩 개념
- JSON 인코딩: Dart 객체를 JSON 문자열로 변환하는 과정입니다. 이 과정은 데이터를 저장하거나 네트워크를 통해 전송할 때 사용됩니다.
- JSON 디코딩: JSON 문자열을 Dart 객체로 변환하는 과정입니다. 이 과정은 서버로부터 받은 JSON 데이터를 사용하거나 저장된 JSON 데이터를 읽을 때 필요합니다.
2. dart:convert 라이브러리 소개
dart:convert 라이브러리는 JSON 데이터의 인코딩과 디코딩을 지원하는 클래스와 함수를 제공합니다. 주요 클래스 및 함수는 다음과 같습니다
- jsonEncode(): Dart 객체를 JSON 문자열로 변환합니다.
- jsonDecode(): JSON 문자열을 Dart 객체로 변환합니다.
3. JSON 디코딩
JSON 문자열을 Dart 객체로 변환하는 과정입니다. jsonDecode() 함수를 사용하여 JSON 문자열을 Dart의 Map 또는 List로 변환할 수 있습니다.
예제: JSON 문자열을 Dart 객체로 변환하기
import 'dart:convert';
void main() {
// JSON 문자열
var jsonString = '{"name": "John", "age": 30}';
// JSON 문자열을 Dart 객체로 변환
var user = jsonDecode(jsonString);
// Dart 객체에서 데이터 접근
print('Name: ${user['name']}'); // 결과: Name: John
print('Age: ${user['age']}'); // 결과: Age: 30
}
이 예제에서 jsonDecode를 사용하여 JSON 문자열을 Dart의 Map 객체로 변환합니다. 변환된 객체에서 키를 사용하여 값을 접근할 수 있습니다.
예제: JSON 배열을 Dart 리스트로 변환하기
import 'dart:convert';
void main() {
// JSON 배열 문자열
var jsonArrayString = '[1, 2, 3, 4, 5]';
// JSON 문자열을 Dart 리스트로 변환
var numbers = jsonDecode(jsonArrayString);
// Dart 리스트에서 데이터 접근
print('First number: ${numbers[0]}'); // 결과: First number: 1
}
이 예제에서는 JSON 배열을 Dart의 List로 변환합니다. 변환된 리스트에서 인덱스를 사용하여 값에 접근할 수 있습니다.
4. JSON 인코딩
Dart 객체를 JSON 문자열로 변환하는 과정입니다. jsonEncode() 함수를 사용하여 Dart 객체를 JSON 문자열로 변환할 수 있습니다.
예제: Dart 객체를 JSON 문자열로 변환하기
import 'dart:convert';
void main() {
// Dart 객체
var user = {'name': 'John', 'age': 30};
// Dart 객체를 JSON 문자열로 변환
var jsonString = jsonEncode(user);
// JSON 문자열 출력
print(jsonString); // 결과: {"name":"John","age":30}
}
이 예제에서는 jsonEncode를 사용하여 Dart 객체를 JSON 문자열로 변환합니다. 변환된 문자열은 JSON 형식으로 출력됩니다.
예제: Dart 리스트를 JSON 배열로 변환하기
import 'dart:convert';
void main() {
// Dart 리스트
var numbers = [1, 2, 3, 4, 5];
// Dart 리스트를 JSON 배열로 변환
var jsonArrayString = jsonEncode(numbers);
// JSON 배열 문자열 출력
print(jsonArrayString); // 결과: [1,2,3,4,5]
}
이 예제에서는 Dart 리스트를 JSON 배열 문자열로 변환합니다. 변환된 문자열은 JSON 형식으로 출력됩니다.
5. 실용적인 예제: JSON 데이터와 서버 통신
JSON 데이터는 서버와 클라이언트 간의 데이터 교환에서 매우 중요합니다. 다음은 Dart를 사용하여 서버에 JSON 데이터를 전송하고, 서버로부터 JSON 데이터를 받는 예제입니다.
예제: JSON 데이터를 서버에 전송하기
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
// 서버 URL
var url = Uri.parse('http://localhost:8080/api/user');
// Dart 객체
var user = {'name': 'John', 'age': 30};
// JSON 문자열로 변환
var jsonString = jsonEncode(user);
// POST 요청 보내기
var response = await http.post(
url,
headers: {'Content-Type': 'application/json'},
body: jsonString,
);
if (response.statusCode == 200) {
print('Request succeeded');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
이 예제에서는 http.post를 사용하여 JSON 형식의 데이터를 서버로 전송합니다.
headers 매개변수에 Content-Type: application/json을 설정하여 데이터 형식을 명시하고, body 매개변수에 JSON 문자열을 전송합니다.
예제: 서버로부터 JSON 데이터 받기
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
// 서버 URL
var url = Uri.parse('http://localhost:8080/api/user');
// GET 요청 보내기
var response = await http.get(url);
if (response.statusCode == 200) {
// JSON 문자열을 Dart 객체로 변환
var data = jsonDecode(response.body);
print('Received data: $data');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
이 예제에서는 http.get을 사용하여 서버로부터 JSON 데이터를 받아오고, jsonDecode를 사용하여 JSON 문자열을 Dart 객체로 변환합니다.
Dart에서 dart:convert 라이브러리를 사용하여 JSON 데이터를 인코딩하고 디코딩하는 방법에 대해 알아보았습니다.
JSON 데이터는 데이터 저장과 전송에서 매우 중요한 역할을 하며, Dart의 jsonEncode와 jsonDecode를 통해 간편하게 처리할 수 있습니다.
이러한 기본적인 이해를 바탕으로 다양한 데이터 처리 작업을 효율적으로 수행할 수 있습니다.
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Server' 카테고리의 다른 글
[초급] Dart RESTful API 설계 기초/RESTful API의 기본 원칙과 설계 (0) | 2024.09.08 |
---|---|
[초급] Dart Server JSON 처리 및 데이터 직렬화/ 간단한 API 서버 구축하기: JSON 데이터 반환 및 처리 (0) | 2024.09.06 |
[초급] Dart Server JSON 처리 및 데이터 직렬화/JSON 데이터를 다루는 기본 방법 (4) | 2024.09.06 |
[초급] Dart로 간단한 서버 구축하기/라우팅 기초: 경로에 따른 요청 처리 (0) | 2024.09.05 |
[초급] Dart로 간단한 서버 구축하기/기본적인 GET, POST 요청 처리 방법 (1) | 2024.09.05 |