Flutter中json.decode解析后数据顺序改变,如何保留插入顺序?
JSON解析后顺序乱了?教你保留原始插入顺序
为啥会出现乱序?
Dart自带的jsonDecode虽然底层用了LinkedHashMap(理论上该保留插入顺序),但碰到纯数字格式的字符串键时,Dart会自动把这些键当成数字来排序,导致打印或遍历的时候顺序和原始JSON不一致。
解决方案
直接在解析时指定用LinkedHashMap存储数据,通过jsonDecode的reviver参数自定义解析逻辑即可:
修改后的代码示例
import 'dart:convert'; import 'dart:collection'; void main() { String jsonResult = '{"113":"13:37:20","155":"13:38:10","157":"13:38:42","159":"13:39:29","161":"13:39:55","163":"13:40:36","165":"13:40:54","135":"13:41:19","137":"13:41:38","139":"13:42:01","141":"13:42:19","143":"13:42:45","145":"13:43:34","147":"13:44:02","149":"13:44:27","0710":"13:48:28","0730":"13:49:12","0750":"13:49:38","0770":"13:50:13","0800":"13:50:45","0810":"13:51:20","0830":"13:55:09","0870":"13:56:41","0900":"14:04:42","1060":"14:17:49"}'; if (jsonResult.isNotEmpty) { // 强制用LinkedHashMap保留原始插入顺序 final jsonData = jsonDecode(jsonResult, reviver: (key, value) { if (value is Map) { return LinkedHashMap.from(value); } return value; }) as LinkedHashMap<String, dynamic>; print('#######'); print(jsonResult); print('-----------'); print(jsonData); } }
额外说明
LinkedHashMap是Dart专门用于保留插入顺序的Map实现,能完全匹配JSON的原始顺序。- 虽然JSON规范中说明对象的键值对是无序的,但实际业务场景中很多接口会依赖顺序,用上述方法就能解决你的问题。
内容的提问来源于stack exchange,提问作者caspar
相关产品推荐
相关产品推荐

