728x90
dart:convert
-
JSON 및 UTF-8 을 포함한 다양한 데이터 표현간 변환을 위한 인코더 및 디코더를 지원하는 라이브러리이다.
예제1
기본적인 JSON 문자열을 파싱하고 접근하는 방법에 대한 예제입니다.
JSON 문자열을 파싱하기 위해서는 jsonDecode() 함수를 사용하며 Map 객체로 변환합니다.
import 'dart:convert';
void main(){
String jsonString = '{"name": "red"}';
String jsonString2 = '{"name": ["red", "green", "blue"]}';
Map<String, dynamic> color = jsonDecode(jsonString);
Map<String, dynamic> color2 = jsonDecode(jsonString2);
print(color);
print(color2);
print('${color['name']}');
print('${color2['name']}');
}
{name: red}
{name: [red, green, blue]}
red
[red, green, blue]
예제2
다음은 데이터 모델 클래스 이용하여 JSON 으로 직렬화를 알아보겠습니다.
이 방법을 사용하면, 변수에 대한 타입 안정성, 자동완성, 컴파일 타임 예외처리가 가능하구요.
복잡하게 중첩되지않은 JSON 형식에 대한 인코딩, 디코딩에 유리합니다.
color.dart
class Color {
final int id;
final String name;
final String rgb;
Color(this.id, this.name, this.rgb);
Color.fromJson(Map<String, dynamic> json)
: id = json['id'],
name = json['name'],
rgb = json['rgb'];
Map<String, dynamic> ToJson() =>
{
'id': id,
'name': name,
'rgb': rgb
};
}
main.dart
import 'dart:convert';
import 'color.dart';
void main(){
// 1
var blue = Color(1, 'blue', '0, 0, 255');
var toJson = blue.ToJson();
print('${toJson['id']}');
print('${toJson['name']}');
print('${toJson['rgb']}');
String jsonString2 = jsonEncode(toJson);
print(jsonString2);
// 2
String jsonString = '{"id": 2, "name": "blue", "rgb": "0, 0, 255"}';
Map colorMap = jsonDecode(jsonString);
var color = Color.fromJson(colorMap);
print(color.id);
print(color.name);
print(color.rgb);
// 3
String jsonString = '[{"id": 1, "name": "red", "rgb": "255, 0, 0"}, {"id": 2, "name": "green", "rgb": "0, 255, 0"}, {"id": 3, "name": "blue", "rgb": "0, 0, 255"}]';
List list = jsonDecode(jsonString);
for(var color in list){
print("${color['id']} ${color['name']} ${color['rgb']}");
}
var colorList = list.map((element) => Color.fromJson(element)).toList();
for(var color in colorList){
print('${color.id} ${color.name} ${color.rgb}');
}
}
우선 JSON 문자열로 인코딩하기 위해서는 클래스 객체를 생성해서 클래스의 ToJson 메서드를 이용하여 Map 객체를 생성합니다.
var blue = Color(1, 'blue', '0, 0, 255');
var toJson = blue.ToJson();
print('${toJson['id']}');
print('${toJson['name']}');
print('${toJson['rgb']}');
1
blue
0, 0, 255
jsonEncode() 함수를 이용하여 JSON 문자열로 변환합니다.
String jsonString2 = jsonEncode(toJson);
print(jsonString2);
{"id":1,"name":"blue","rgb":"0, 0, 255"}
반대의 경우에는 jsonDecode() 함수를 이용하여 JSON 문자열을 Map 객체로 변환하고
클래스에서 작성한 fromJson() 메서드를 통해 객체로 변환하여 접근합니다.
String JsonString = '{"id": 2, "name": "blue", "rgb": "0, 0, 255"}';
Map colorMap = jsonDecode(JsonString);
var color = Color.fromJson(colorMap);
print(color.id);
print(color.name);
print(color.rgb);
JSON Array 의 처리는 다음과 같습니다.
String jsonString = '[{"id": 1, "name": "red", "rgb": "255, 0, 0"}, {"id": 2, "name": "green", "rgb": "0, 255, 0"}, {"id": 3, "name": "blue", "rgb": "0, 0, 255"}]';
List list = jsonDecode(jsonString);
for(var color in list){
print("${color['id']} ${color['name']} ${color['rgb']}");
}
var colorList = list.map((element) => Color.fromJson(element)).toList();
for(var color in colorList){
print('${color.id} ${color.name} ${color.rgb}');
}
1 red 255, 0, 0
2 green 0, 255, 0
3 blue 0, 0, 255
1 red 255, 0, 0
2 green 0, 255, 0
3 blue 0, 0, 255
참고
'Language > Dart' 카테고리의 다른 글
다트(Dart) 훑어보기 -2 : 제어문 / 반복문 (0) | 2020.08.07 |
---|---|
다트(Dart) 훑어보기 -1 : 데이터 타입 / VSCode 에서 실행하기 (0) | 2020.08.07 |