jsonEncode 函数
将 object
转换为 JSON 字符串。
如果值包含不能直接编码为 JSON 字符串的对象(不是数字、布尔值、字符串、null、列表或具有字符串键的映射),则使用 toEncodable
函数将其转换为必须直接编码的对象。
如果省略 toEncodable
,则默认使用返回无法编码对象调用 .toJson()
的结果的函数。
是 json.encode
的简写形式。如果局部变量遮蔽了全局的 json 常量,则很有用。
示例
const data = {'text': 'foo', 'value': 2, 'status': false, 'extra': null};
final String jsonString = jsonEncode(data);
print(jsonString); // {"text":"foo","value":2,"status":false,"extra":null}
将不支持的对象转换为自定义 JSON 格式的示例
class CustomClass {
final String text;
final int value;
CustomClass({required this.text, required this.value});
CustomClass.fromJson(Map<String, dynamic> json)
: text = json['text'],
value = json['value'];
static Map<String, dynamic> toJson(CustomClass value) =>
{'text': value.text, 'value': value.value};
}
void main() {
final CustomClass cc = CustomClass(text: 'Dart', value: 123);
final jsonText = jsonEncode({'cc': cc},
toEncodable: (Object? value) => value is CustomClass
? CustomClass.toJson(value)
: throw UnsupportedError('Cannot convert to JSON: $value'));
print(jsonText); // {"cc":{"text":"Dart","value":123}}
}
实现
String jsonEncode(Object? object,
{Object? toEncodable(Object? nonEncodable)?}) =>
json.encode(object, toEncodable: toEncodable);