添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
帅气的弓箭  ·  Jackson·  2 周前    · 
果断的可乐  ·  C#之解决 ...·  2 月前    · 
豪爽的金针菇  ·  工具篇 | ...·  1 年前    · 

dart中json和对象互转

开发过程中,json是必不可少的基础技能之一。这里记录下,在Dart语言中,如何将json解析成实例对象,以及如何将实例对象转化成json字符串。

这里使用的工具是 dart:convert 包。

我们的目的很简单,待解析的json字符串格式如下:

"key":"wangdandan", "value":"王蛋蛋的father"

json字符串解析成实例对象

1、创建model对象
class JsonModelDemo {
  String key;
  String value;
2、将实体类对象解析成json字符串。

我们创建一个实例对象,然后给这个实例对象赋值,接着使用jsonDecode方法解析实例对象。代码如下,

import 'dart:convert';
import 'package:dart_demo1/json/json_model.dart';
///  将实体类对象解析成json字符串
String generatePlatformJson({String key, String value}) {
  JsonModelDemo jsonModelDemo = new JsonModelDemo();
  jsonModelDemo.key = key;
  jsonModelDemo.value = value;
  String jsonStr = jsonEncode(jsonModelDemo);
  return jsonStr;
/// 这里写测试方法
main() {
  String result1 = generatePlatformJson(key: "result1", value: "result1Value");
  print('result1:$result1');

执行代码,报错如下:

lib/json/json_parse_util.dart:1: Warning: Interpreting this as package URI, 'package:dart_demo1/json/json_parse_util.dart'. Unhandled exception: Converting object to an encodable object failed: Instance of 'JsonModelDemo' #0 _JsonStringifier.writeObject (dart:convert/json.dart:645:7) #1 _JsonStringStringifier.printOn (dart:convert/json.dart:832:17) #2 _JsonStringStringifier.stringify (dart:convert/json.dart:817:5) #3 JsonEncoder.convert (dart:convert/json.dart:253:30) #4 JsonCodec.encode (dart:convert/json.dart:164:45) #5 jsonEncode (dart:convert/json.dart:76:10) #6 generatePlatformJson (package:dart_demo1/json/json_parse_util.dart:10:20) #7 main (package:dart_demo1/json/json_parse_util.dart:16:20) #8 _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19) #9 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12) Process finished with exit code 255

查找Converting object to an encodable object failed: Instance of 'xxx'这个错误,在stackoverflow上找到答案:https://stackoverflow.com/questions/27739434/dart-object-json-string-failing-to-convert-to-json

我们给model实体类添加toJson方法:

class JsonModelDemo {
  String key;
  String value;
  /// jsonDecode(jsonStr) 方法中会调用实体类的这个方法。如果实体类中没有这个方法,会报错。
  Map toJson() {
    Map map = new Map();
    map["key"] = this.key;
    map["value"] = this.value;
    return map;

这次再运行代码,解析成功,输出如下:

result1:{"key":"result1","value":"result1Value"}

实例对象转化成json字符串

解析代码如下:

/// 将json字符串解析成实体类对象
JsonModelDemo parsePlatformJson(String jsonStr) {
  JsonModelDemo result = jsonDecode(jsonStr);
  return result;

测试代码如下:

JsonModelDemo modelDemo = parsePlatformJson(result1);
  print('parsePlatformJson:$modelDemo');

为了方便测试,在JsonModelDemo中重写toString方法;

@override
String toString() {
return 'JsonModelDemo{key: $key, value: $value}';

运行代码,报错如下:

Unhandled exception:
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'JsonModelDemo'
#0      parsePlatformJson (package:dart_demo1/json/json_parse_util.dart:16:17)
#1      main (package:dart_demo1/json/json_parse_util.dart:25:29)
#2      _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19)
#3      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)

仔细观察报错,发现是类型不匹配,具体原因是jsonDecode方法返回的是Map<String, dynamic>,不是我们期望的实例对象。所以,我们还需要将Map<String, dynamic>转化为我们想要的实例对象。

在model中添加转化方法:

/// jsonDecode(jsonStr)方法返回的是Map<String, dynamic>类型,需要这里将map转换成实体类
static JsonModelDemo fromMap(Map<String, dynamic> map) {
    JsonModelDemo jsonModelDemo = new JsonModelDemo();
    jsonModelDemo.key = map['key'];
    jsonModelDemo.value = map['value'];
    return jsonModelDemo;

接着修改解析方法:

/// 将json字符串解析成实体类对象
JsonModelDemo parsePlatformJson(String jsonStr) {
  JsonModelDemo result = JsonModelDemo.fromMap(jsonDecode(jsonStr));
  return result;

运行代码,解析成功,输出如下:

result1:{"key":"result1","value":"result1Value"}
parsePlatformJson:JsonModelDemo{key: result1, value: result1Value}

https://stackoverflow.com/questions/27739434/dart-object-json-string-failing-to-convert-to-json

https://www.dartlang.org/guides/libraries/library-tour#dartconvert—decoding-and-encoding-json-utf-8-and-more

https://medium.com/flutter-community/parsing-complex-json-in-flutter-747c46655f51

dart中json和对象互转开发过程中,json是必不可少的基础技能之一。这里记录下,在Dart语言中,如何将json解析成实例对象,以及如何将实例对象转化成json字符串。这里使用的工具是dart:convert包。我们的目的很简单,待解析的json字符串格式如下:{"key":"wangdandan","value":"王蛋蛋的father"}json字符串解析成实例对象1...
Dart(flutter) json序列化 踩坑 刚接触Dart,发请求返回json,进行序列化,官方给了方案,也给了推荐的工具,json_serializable。但是这个工具真的有坑!记录一下。 数据结构如下: {&amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;,&amp;quot;result&amp;quot;:&amp;quot;123&amp;quot;,&amp;quo
打开游戏时提示unhandled exception…,可以在按住shift键的时候,鼠标点击重启计算机,然后进入电脑重置页面,点保存数据的同时重置,待重置完后,再打开游戏,方可进入
转自:http://blog.sina.com.cn/s/blog_668aae780101iou9.html http://yaogangshi.iteye.com/blog/1001690 http://bbs.csdn.net/topics/390019506 问题:在用c++扩展php进行调试时,用malloc或new开辟数据空间并将php的array数据传入时,出现异常:Unhandled exception at 0x777F5624 (ntdll.dll) in php.exe: 0
近期项目从 OC 转 Flutter 过程,接口调用返回数据时 json 字符串转 Map。总结一下: 遇到的问题: 使用 toString() 方法能将对象转换成字符串,但是会丢失引号等信息,不再是标准 JSON,导致服务端解析不正常 json转换为字符串 import 'dart:convert' as convert; /// json转换为字符串 void testJson2Str...
方式一:在线生成,适合没有办法安装其他辅助插件的IDE,类似vscode,通过网站https://javiercbk.github.io/json_to_dart/将json数据转换成dart实体类 方式二:使用Android studio 、Intellij IDEA安装FlutterJsonBeanFactory插件生成 具体操作方法可以参考:https://blog.csdn....
Dart读取JSON文件并将其转换为Map对象可以使用dart:convertjson.decode()方法实现。 示例代码如下: import 'dart:convert'; void main() { // 读取json文件 String jsonString = await rootBundle.loadString('assets/data.json');
序列化DateTime 当我想打印一下当前时间时,我先将DareTime转换成字符串,然后打印. 因为在JavaScript就是这么做的JSON.stringify(XXXX),没想到dart报错了. print( jsonEncode(DateTime.now()) ); /// error Converting object to an encodable object failed. 使用自定义编码器进行序列化 import 'dart:convert' show JSON;
新手在写代码的过程,编译环境常常会被提示unhandled exception:(未处理的异常),这说明某个方法在方法一场上已经声明了会跑一场,在调用这个方法的时候就要做异常处理 处理方法:try…catch 使用快捷键:Alt+Enter 选就好 这是一个相对很复杂的json文件 用jsonview打开查看,这个json文件包含一个data的数组和两个变量,然后数组的每一项又包含一个数组和6个变量,然后下一级数组的每一项又包含一个数组和6个变量 下面使用jsonformat 转换成dart bean文件 打开下载的jsonfor...
Dart ,可以使用 dart:convertjson.decode() 函数将 JSON 字符串转换为 Map。首先需要导入 dart:convert 库,然后调用 json.decode() 函数并传入 JSON 字符串作为参数。代码示例如下: import 'dart:convert'; Map<String, dynamic> jsonMap = json.decode(jsonString);