日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dart系列之:还在为编码解码而烦恼吗?用dart试试

發(fā)布時(shí)間:2024/2/28 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dart系列之:还在为编码解码而烦恼吗?用dart试试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 簡介
  • 為JSON編碼和解碼
  • UTF-8編碼和解碼
  • 總結(jié)

簡介

在我們?nèi)粘J褂玫臄?shù)據(jù)格式中json應(yīng)該是最為通用的一個(gè)。很多時(shí)候,我們需要把一個(gè)對象轉(zhuǎn)換成為JSON的格式,也可以說需要把對象編碼為JSON。

雖然在dart中所有的字符都是以UTF-16來存儲(chǔ)的,但是更加通用的格式應(yīng)該是UTF-8,同樣的dart也提供了對UTF-8的編碼支持。

所有的這一切,都包含在dart:convert包中。

要想使用convet包,簡單的引入即可:

import 'dart:convert';

為JSON編碼和解碼

首先要注意的是,雖然dart中可以用單引號(hào)或者雙引號(hào)來表示字符串,但是在json中,字符串必須是以雙引號(hào)來表示的,否則就不是一個(gè)真正的json,這點(diǎn)一定要注意,所以,我們需要這樣定義JSON :

var studentJson = '''[{"name": "jack"},{"age": 18}] ''';

而不是這樣:

var studentJson = '''[{'name': 'jack'},{'age': 18}] ''';

如果要讓json字符串轉(zhuǎn)換成為對象,則可以使用convert包里面的jsonDecode方法:

var studentList = jsonDecode(studentJson); assert(studentList is List);var student = studentList[0]; assert(student is Map); assert(student['name'] == "jack");

除了decode之外,還可以將對象encode成為Json字符串:

var studentList = [{"name": "jack"},{"age": 18} ];var studentString = jsonEncode(studentList); assert(studentString =='[{"name":"jack"},{"age":18}]');

上面對象只是一個(gè)簡單的對象,可以直接轉(zhuǎn)換成為JSON。如果是復(fù)雜對象怎么辦呢?

比如對象中嵌套對象,那么嵌入的對象是否也會(huì)被轉(zhuǎn)換成為JSON呢?

dart考慮到了這個(gè)問題,所以在jsonEncode方法中還有第二個(gè)參數(shù),表示如何將不可直接encode的對象轉(zhuǎn)換成為可以encode的對象:

String jsonEncode(Object? object,{Object? toEncodable(Object? nonEncodable)?}) =>json.encode(object, toEncodable: toEncodable);

如果第二個(gè)參數(shù)被忽略了,那么會(huì)調(diào)用對應(yīng)對象的.toJson()方法。

UTF-8編碼和解碼

先看下UTF-8的解碼方法:

String decode(List<int> codeUnits, {bool? allowMalformed})

第一個(gè)參數(shù)是傳入一個(gè)UTF-8的codeUnits數(shù)組,第二個(gè)參數(shù)表示是否替換Unicode替換字符的字符序列U+FFFD。 如果傳入false的話,遇到這樣的字符就會(huì)拋出FormatException。

看一個(gè)使用的例子:

List<int> utf8Bytes = [119, 119, 119, 46, 102, 108, 121, 100, 101, 97, 110, 46, 99, 111, 109];var site = utf8.decode(utf8Bytes);assert(site == 'www.flydean.com');

相應(yīng)的,可以使用encode對字符串或者其他對象進(jìn)行編碼:

print(utf8.encode('www.flydean.com'));

總結(jié)

以上dart對json和UTF-8的支持。

本文已收錄于 http://www.flydean.com/19-dart-decode-encode/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!

歡迎關(guān)注我的公眾號(hào):「程序那些事」,懂技術(shù),更懂你!

總結(jié)

以上是生活随笔為你收集整理的dart系列之:还在为编码解码而烦恼吗?用dart试试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。