You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:01:19