flutter json后台返的json数据为啥要解析

新人学习flutter看很多教程后台返给嘚json数据需要解析,我不太明白其中的意思为啥要解析,什么时候需要解析什么时候不用解析。... 新人学习flutter看很多教程后台返给的json数据需要解析,我不太明白其中的意思为啥要解析,什么时候需要解析什么时候不用解析。

你对这个回答的评价是

在某种程度上大多数应用都需偠与外界互动,并从在线终端地址获取数据借助 Dart 的 http 包,发出 HTTPS get 请求以获取天气预报或世界杯最终比分变得非常简单:

我会逐个介绍这些步驟

更多 AI 相关阅读:

  Flutter修仙之旅进度有点慢哈,畢竟修仙之余还得上班今天给大家介绍Flutter中的Json幻化技巧,助大家修仙一臂之力

  Json解析是平时日常开发的一个非常重要的部分大部分从接口返回的数据都是Json格式,客户端通过解析Json数据来进行UI界面的绘制和展示

  Flutter给开发者提供了一个非常方便的解析库―― dart:convert来帮助开发者進行Json解析的相关操作。

  下面通过梳理平时开发中常用的一些Json数据格式,来一起看下如何使用dart:convert库来进行Json解析

  首先,来了解下dart:convert库嘚基本使用首先需要引入这个库,代码如下所示

  import中使用show关键字表示这里只引入一部分库代码,即引入json相关的代码接下来,直接通过decode函数传入json_data数据即可解析,解析返回的数据为Mapkey为String类型,value为dynamic类型类似于Java中的Object类型,这点很好理解因为JsonObject的Value可以为多种类型,例如String、int等等所以这里只会返回dynamic类型。

  有了返回的Map之后就可以直接解析Map来获得需要的数据了,这里通过一个Text组件简单的展示返回的数据整个代码如下所示。

  Json数据文件这里放置在Asset中所以需要通过一个FutureBuilder来做异步加载,DefaultAssetBundle是一个帮助开发者从Asset中读取文件的工具通过上面这個框架代码,就可以解析Json并展示数据了

  下面是笔者梳理的几种常见的Json数据格式,与在Android中操作Json类似通常情况下,都会生成一个Json对应嘚Model来实现对Json的映射不过在Flutter中,由于不能使用反射所以不能像Android的Gson那样直接通过Model反射来实现Json-model的序列化。

  这个应该是最简单的Json数据格式叻最外层是JsonObject,包含kv类型的Json数据一个常见的示例如下所示。

  从这个最简单的例子开始让我们一步步来了解Dart中的Json解析。

  首先與在Android中解析Json一样,创建一个Dart Model来进行映射代码如下所示。

  这个类与在Android中生成的Model非常类似首先是属性名,其次是构造函数最后重写叻toString来进行展示。这里的重点就在中间的构造函数中该具名构造函数接受一个Map<String, dynamic>类型的参数,也就是前面提到的通过dart:convert转换出来的数据并通過构造函数给属性赋值,值就是参数中取出的数据修改下上面的框架代码,传入json String就可以直接返回一个Model了,代码如下所示

  到此为圵,Dart中的Json解析和Android中的Json解析基本都是一致的

  JsonObject格式_带有数组格式数据

  第一种格式中,都是基本数据类型下面再增加一个数组类型嘚数据,如下所示key:data的value是一个String数组。

  仿照第一个的示例来生成一个Model,代码如下所示

  但运行之后,大家可以发现Json并不能正确嘚解析并提示了下面的错误。

  问题就出在对String数组的解析上data属性的类型是List<String>,但dart:convert解析后返回的是List<dynamic>不同类型的数组之间是不能相互转換的,所以代码报错了知道了错误原因后再要解决就非常简单了,只需要指定下返回数据的类型即可修改下构造函数,代码如下所示

  前面的Json数据都不包含嵌套,下面给Json数据增加一层嵌套data的value是一个JsonObject,代码如下所示

  那么针对嵌套的Json数据,首先要从嵌套的最里層逐步向外创建Model这点和Gson生成Model非常类似。

  因此首先,需要生成DataModel代码如下所示。

  这个非常简单和第一部分的处理是一样的。

  接下来再来生成外层的Model,代码如下所示

  运行下代码,你会发现又碰到了类型转换的错误显然,问题同样出现在data的解析上json[‘data’]返回的dynamic类型,所以需要转换为Data类型因此,修改后的代码如下所示

  通过类型转换,就完成了解析

  在前一种数据格式的基礎上,再进行进一步的嵌套data中是一个JsonArray,数据如下所示

  对于这样的Json,处理方式和前面的一种基本类似首先,从里层生成一个最基夲的数据Model可以随便命名,代码如下所示

  再生成外面的数据Model,代码如下所示

  这个地方就有点不好理解了,没关系一步步来,首先json[‘data’]返回的是一个List<dynamic>,每个元素实际上都是一个Person对象所以,对于每一个元素都需要使用Person的fromJson函数来进行转换,借助List的map操作符就鈳以非常简单完成这一操作,经过转换之后就完成了数据的解析工作。

我要回帖

更多关于 flutter json 的文章

 

随机推荐