개체를 인코딩 가능한 개체로 변환하지 못했습니다.
다음의 에러가 표시됩니다.
Converting object to an encodable object failed: Instance of 'Patient'
#0 _JsonStringifier.writeObject (dart:convert/json.dart:674)
#1 _JsonStringifier.writeList (dart:convert/json.dart:724)
#2 _JsonStringifier.writeJsonValue (dart:convert/json.dart:706)
#3 _JsonStringifier.writeObject (dart:convert/json.dart:664)
#4 _JsonStringStringifier.printOn (dart:convert/json.dart:873)
#5 _JsonStringStringifier.stringify (dart:convert/json.dart:855)
#6 JsonEncoder.convert (dart:convert/json.dart:256)
#7 JsonCodec.encode (dart:convert/json.dart:155)
#8 Persistence.saveLatestPatients (/Users/dean/Library/Developer/CoreSimulator/Devices/570CC18D-95BF-4062-8523-9C78E106D0CF/data/Containers/Data/Application/70CAEFAA-4AE3-4CBF-A85F-39161E472C83/tmp/flutter_prototypev6jYbr/flutter_prototype/lib/utils/persistence.dart:32:23)
<asynchronous suspension>
#9 _HomeScreenState.fetchData.<anonymous closure> (/Users/dean/Librar<…>
내 '환자' 클래스:
import 'package:simple_moment/simple_moment.dart';
class Patient {
String guid;
String _name;
String _surname;
DateTime _updated;
Patient(String guid) {
this.guid = guid;
}
String get name => _name;
set name(v) => _name = v;
String get surname => _surname;
set surname(v) => _surname = v;
DateTime get updated => _updated;
set updated(v) => _updated = v;
// Helper functions
String getFullName() => '$_name $_surname';
String getRelativeLastUpdated() {
var moment = new Moment.now();
return moment.from(_updated);
}
}
라이브러리를 추가할 필요가 없습니다.오브젝트에 FromJson 및 ToJson 함수를 구현하기만 하면 됩니다.
예:
class LinkItem {
final String name;
final String url;
LinkItem({this.name, this.url});
LinkItem.fromJson(Map<String, dynamic> json)
: name = json['n'],
url = json['u'];
Map<String, dynamic> toJson() {
return {
'n': name,
'u': url,
};
}
}
그런 다음 jsonEncode를 호출할 수 있습니다.
List<LinkItem> list = await getUserLinks();
list.add(linkItem);
String json = jsonEncode(list);
결과:
[{"n":"Google","u":"https://www.google.com/"},{"n":"Test","u":"https://www.test.com/"},{"n":"etc","u":"etc"}]
임의의 클래스 인스턴스를 JSON으로 변환할 수는 없습니다.
Flutter가 반사를 지원하지 않기 때문입니다.따라서 플래터 어플리케이션의 어떤 다트 프로그램도 클래스 피쳐의 속성을 판별할 수 없습니다.따라서 Flutter에서는 임의의 오브젝트를 시리얼화할 수 없습니다.
하나의 옵션은 (를 통해) Json Encoder() 컨스트럭터에 커스텀 함수를 제공하는 것입니다.toEncodable
인수).이 커스텀 함수는 커스텀오브젝트를 JsonEncoder가 이미 처리할 수 있는 유형(예: 숫자, 문자열, 부울, 늘, 리스트 및 문자열 키가 있는 맵)에 매핑해야 합니다.
여기서 리플렉터블 플러그인을 사용할 수 있습니다.
https://api.dartlang.org/stable/1.24.3/dart-convert/JsonEncoder-class.html
https://pub.dartlang.org/packages/json_serializable은 코드를 생성하는 패키지이므로 수동으로 작성할 필요가 없습니다.
https://flutter.io/json/ 도 참조해 주세요.
제 경우 맵 오브젝트에서 정수 키를 사용하려고 했습니다.String으로 변환하자 오류가 해결되었습니다.행운을 빌어요.
제 경우 Date Time을 맵오브젝트에 직접 추가하려고 했습니다.String으로 변환하자 오류가 해결되었습니다.
전에
return {
'birthDay', instance.birthDay
};
지금이다
return {
'birthDay', instance.birthDay?.toIso8601String(),
};
제가 쓰려고 했는데Uri
dio 요청 매개 변수의 맵에 넣습니다.String으로 변환하면 문제가 해결.
직접 사용 시 오류 발생redirectUrl
의 일례.Uri
data: {
'client_id': identifier,
'client_secret': secret,
'code': code,
'redirect_uri': redirectUrl
});
변환 후 오류 없음String
.
data: {
'client_id': identifier,
'client_secret': secret,
'code': code,
'redirect_uri': redirectUrl.toString()
});
저 같은 경우에는
return file.writeAsString(jsonEncode(addNewScore(scorer, s)));
jsonEncode
에러를 던지고 있었다Converting object to an encodable object failed: _LinkedHashMap len:1
{ off : { times : { 15 : [ { score : 6, ts : 1640916433851) }} <--여기서 15는 실제로는int
그래서 그 재산을 환산한 후에int
로.String
정확하게 얻을 수 있다
{ "off": { "times": { "15": [{ "score":6,ts":1640916433851)}} }
JSON은 정수 키 또는 속성을 허용하지 않습니다.
MappedListItable <MyObject, int>를 부호화하려고 했기 때문에 이 문제가 발생했습니다.
개체를 인코딩 가능한 개체로 변환하지 못했습니다.Mapped List Itable <My Object, int> 인스턴스
그리고 json Encode는 특정 유형만 인코딩할 수 있다는 것을 기억했습니다(어디선가 빨간색으로...).따라서 MappedListItable <MyObject, int> 오브젝트에서 .toList를 호출하면 목록이 jsonEncode에 의해 부호화되기 때문에 문제가 해결되었습니다.
"JSON 변환은 맵, 목록, 문자열, 숫자, 부울 또는 늘에서만 작동합니다."
따라서, jsonEncode를 사용하려는 데이터 유형이 jsonEncode에서 지원되는지 확인하십시오.
제 경우 json 요청을 작성하면서 여러 개의 '{' 중괄호를 추가했습니다.교정기를 떼고 나서 잘 작동했어요.
jsonEncode({
{
'isAnonymous': request.isAnonymous,
}});
변환을 수행해야 하는 클래스에 toJson()이라는 이름의 메서드를 추가합니다.으로 변환 논리를 넣고 논리를 사용합니다.this.propety_name
여기서 예를 보겠습니다.String toJson() { return jsonEncode({}); }
언급URL : https://stackoverflow.com/questions/49753412/converting-object-to-an-encodable-object-failed
'programing' 카테고리의 다른 글
JSON 구문 오류: '예상하지 않은 번호' 또는 'JSON.parse: 개체의 속성 값 뒤에 ' , 또는 '}'이(가) 있어야 합니다.' (0) | 2023.03.29 |
---|---|
GSON을 사용한 JSON 파일 해석 (0) | 2023.03.29 |
React 라우터를 사용하여 프로그래밍 방식으로 탐색 (0) | 2023.03.29 |
Spring 부트버전 2.1.4에서 2.1.5로 변경하면 알 수 없는 설정 Maven 오류가 발생하는 이유는 무엇입니까? (0) | 2023.03.29 |
워드프레스 개발 및 도입 자동화 (0) | 2023.03.29 |