2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Flutter에서 JSON 데이터를 파싱하는 방법은 무엇인가요?

_____
Q1. Flutter에서 JSON 데이터를 파싱하는 기본 방법은 무엇인가요?
A1. Flutter에서는 `dart:convert` 패키지에 포함된 `json.decode()` 함수를 사용해 JSON 문자열을 Map 또는 List로 변환할 수 있습니다. 예를 들어:
```dart
import 'dart:convert';

void main() {
String jsonString = '{"name": "홍길동", "age": 30}';
Map user = json.decode(jsonString);
print(user['name']); // 홍길동
}
```

Q2. JSON 파싱 후 데이터를 모델 클래스로 변환하려면 어떻게 하나요?
A2. JSON Map을 Dart 객체로 변환하려면 모델 클래스를 만들고, factory 생성자를 통해 `fromJson` 메서드를 정의합니다. 예:
```dart
class User {
final String name;
final int age;

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

factory User.fromJson(Map json) {
return User(
name: json['name'],
age: json['age'],
);
}
}

void main() {
String jsonString = '{"name": "홍길동", "age": 30}';
Map userMap = json.decode(jsonString);
User user = User.fromJson(userMap);
print(user.name); // 홍길동
}
```

Q3. JSON 배열을 파싱하려면 어떻게 해야 하나요?
A3. JSON 배열은 `List`로 변환되며, 각 아이템을 모델로 매핑할 수 있습니다. 예:
```dart
String jsonString = '[{"name": "홍길동", "age": 30}, {"name": "김철수", "age": 25}]';
List userList = json.decode(jsonString);
List users = userList.map((json) => User.fromJson(json)).toList();
```

Q4. JSON 파싱 시 null 안전성을 확보하려면 어떻게 하나요?
A4. Dart의 null safety를 고려해 파싱 시 null 체크를 하고, 필수 필드에 대해 적절한 예외 처리를 합니다. 예:
```dart
factory User.fromJson(Map json) {
return User(
name: json['name'] ?? '이름없음',
age: json['age'] ?? 0,
);
}
```
또는 필수 필드가 없으면 예외를 던질 수도 있습니다.

Q5. 자동으로 JSON 파싱 코드를 생성해주는 도구가 있나요?
A5. 네, `json_serializable` 패키지를 이용하면 빌더를 통해 모델 클래스에 자동으로 `fromJson`, `toJson` 코드를 생성할 수 있습니다. 작업 순서:
- `pubspec.yaml`에 `json_serializable`, `build_runner` 추가
- 모델 클래스에 `@JsonSerializable()` 어노테이션 추가
- `flutter pub run build_runner build` 실행하여 코드 생성
이는 반복 작업을 줄이고 유지보수를 쉽게 해줍니다.

Q6. Flutter 네트워킹과 JSON 파싱은 어떻게 연동하나요?
A6. 주로 `http` 패키지를 사용해 REST API 호출 후, 응답의 `body`를 `json.decode()` 해 Map/List로 변환 후 모델에 적용합니다. 예:
```dart
import 'package:http/http.dart' as http;

Future fetchUser() async {
final response = await http.get(Uri.parse('https://api.example.com/user/1'));
if (response.statusCode == 200) {
return User.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to load user');
}
}
```

Q7. JSON 파싱 중 에러가 발생하면 어떻게 처리하나요?
A7. try-catch 문으로 감싸 예외를 처리하거나, null 체크 및 타입 체크를 통해 안전하게 코드를 작성합니다. 예:
```dart
try {
final Map data = json.decode(response.body);
final user = User.fromJson(data);
} catch (e) {
print('JSON 파싱 오류: $e');
}
```

---

이와 같이 Flutter에서 JSON을 파싱할 때는 `dart:convert`를 활용해 문자열을 Map/List로 변환하고, 모델 클래스를 정의해 명확하게 데이터를 다루며 null 안전과 에러 처리를 고려하는 것이 기본 원칙입니다. 더 복잡한 환경에서는 `json_serializable`과 같은 코드 생성 패키지 사용도 권장됩니다.
Flutter에서 JSON 데이터를 파싱하는 것은 RESTful API와 통신하거나 로컬 JSON 파일을 사용할 때 매우 일반적인 작업입니다.

JSON(JavaScript Object Notation)은 데이터를 구조화하는 데 널리 사용되는 형식으로, Flutter에서는 이를 쉽게 처리할 수 있는 여러 방법이 있습니다.

아래에서는 Flutter에서 JSON 데이터를 파싱하는 방법을 단계별로 설명하겠습니다.

1. JSON 데이터 준비 먼저, JSON 데이터를 준비해야 합니다.

예를 들어, 다음과 같은 JSON 데이터를 사용할 수 있습니다.

```json { "id": 1, "name": "John Doe", "email": "[email protected]" } ```

2. 모델 클래스 생성 JSON 데이터를 파싱하기 위해서는 먼저 해당 데이터를 표현할 모델 클래스를 생성해야 합니다.

위의 JSON 데이터를 기반으로 `User`라는 모델 클래스를 만들어 보겠습니다.

```dart class User { final int id; final String name; final String email; User({required this.id, required this.name, required this.email}); // JSON 데이터를 User 객체로 변환하는 팩토리 메서드 factory User.fromJson(Map json) { return User( id: json['id'], name: json['name'], email: json['email'], ); } // User 객체를 JSON 데이터로 변환하는 메서드 Map toJson() { return { 'id': id, 'name': name, 'email': email, }; } } ```

3. JSON 데이터 파싱 이제 JSON 데이터를 `User` 객체로 변환하는 방법을 살펴보겠습니다.

JSON 데이터를 문자열로 받아온 후, `dart:convert` 패키지를 사용하여 파싱할 수 있습니다.

```dart import 'dart:convert'; void main() { // JSON 문자열 String jsonString = '{"id": 1, "name": "John Doe", "email": "[email protected]"}'; // JSON 문자열을 Map으로 변환 Map userMap = jsonDecode(jsonString); // Map을 User 객체로 변환 User user = User.fromJson(userMap); // 결과 출력 print('ID: ${user.id}, Name: ${user.name}, Email: ${user.email}'); } ```

4. API에서 JSON 데이터 가져오기 실제 애플리케이션에서는 API를 통해 JSON 데이터를 가져오는 경우가 많습니다.

`http` 패키지를 사용하여 API에서 데이터를 가져오는 방법을 살펴보겠습니다.



4.1. `http` 패키지 추가 `pubspec.yaml` 파일에 `http` 패키지를 추가합니다.

```yaml dependencies: http: ^0.13.3 ```

4.2. API 호출 및 JSON 파싱 다음은 API에서 JSON 데이터를 가져와서 파싱하는 예제입니다.

```dart import 'dart:convert'; import 'package:http/http.dart' as http; Future fetchUser() async { final response = await http.get(Uri.parse('https://api.example.com/user/1')); if (response.statusCode == 200) { // JSON 데이터를 User 객체로 변환 return User.fromJson(jsonDecode(response.body)); } else { throw Exception('Failed to load user'); } } void main() async { try { User user = await fetchUser(); print('ID: ${user.id}, Name: ${user.name}, Email: ${user.email}'); } catch (e) { print(e); } } ```

5. JSON 데이터 리스트 파싱 JSON 데이터가 리스트 형태일 경우, 여러 객체를 파싱하는 방법도 알아보겠습니다.

예를 들어, 다음과 같은 JSON 배열이 있다고 가정합니다.

```json [ {"id": 1, "name": "John Doe", "email": "[email protected]"}, {"id": 2, "name": "Jane Doe", "email": "[email protected]"} ] ``` 이 경우, `User` 객체의 리스트를 반환하는 메서드를 추가할 수 있습니다.

```dart List parseUsers(String responseBody) { final parsed = jsonDecode(responseBody).cast>(); return parsed.map((json) => User.fromJson(json)).toList(); } ``` 이제 API에서 JSON 배열을 가져와서 파싱하는 방법은 다음과 같습니다.

```dart Future> fetchUsers() async { final response = await http.get(Uri.parse('https://api.example.com/users')); if (response.statusCode == 200) { return parseUsers(response.body); } else { throw Exception('Failed to load users'); } } ``` 결론 Flutter에서 JSON 데이터를 파싱하는 것은 매우 간단하며, 위의 단계들을 통해 쉽게 구현할 수 있습니다.

모델 클래스를 정의하고, JSON 데이터를 파싱하는 메서드를 작성한 후, API 호출을 통해 데이터를 가져오는 방식으로 진행하면 됩니다.

이러한 방법을 통해 Flutter 애플리케이션에서 RESTful API와 효과적으로 통신할 수 있습니다.

작성자: 박현서 [비회원] | 작성일자: 1년 전 2024-09-19 01:51:18
조회수: 185 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.