如何将PHP序列化格式字符串转换为Dart List?
将PHP序列化数组转换为Dart List
针对你提供的PHP序列化字符串(这是一个包含12个整数的索引数组),可以通过两种方式转换为Dart的List<int>:
方法一:手动解析(无需依赖第三方包)
因为目标字符串结构简单,都是整数类型的索引数组,直接按规则提取数值即可:
void main() { String phpSerialized = "a:12{i:0;i:108;i:1;i:109;i:2;i:6;i:3;i:3;i:4;i:103;i:5;i:121;i:6;i:143;i:7;i:127;i:8;i:140;i:9;i:126;i:10;i:149;i:11;i:162;}"; // 移除数组声明和首尾括号 String coreContent = phpSerialized.replaceFirst(RegExp(r'a:\d+{'), '').replaceAll('}', ''); // 按分号分割并过滤空片段 List<String> segments = coreContent.split(';').where((s) => s.isNotEmpty).toList(); List<int> targetList = []; // 每两个片段为一组,提取值部分的整数 for (int i = 1; i < segments.length; i += 2) { String valueStr = segments[i].split(':')[1]; targetList.add(int.parse(valueStr)); } print(targetList); // 输出结果:[108, 109, 6, 3, 103, 121, 143, 127, 140, 126, 149, 162] }
方法二:使用第三方包(适用于复杂结构)
如果后续需要处理更复杂的PHP序列化数据(比如嵌套数组、字符串、对象等),可以使用Dart的php_serializer包:
- 在
pubspec.yaml中添加依赖:
dependencies: php_serializer: ^1.0.0
- 编写解析代码:
import 'package:php_serializer/php_serializer.dart'; void main() { String phpSerialized = "a:12{i:0;i:108;i:1;i:109;i:2;i:6;i:3;i:3;i:4;i:103;i:5;i:121;i:6;i:143;i:7;i:127;i:8;i:140;i:9;i:126;i:10;i:149;i:11;i:162;}"; // 反序列化PHP字符串 dynamic deserialized = PhpSerializer().deserialize(phpSerialized); // 转换为Dart的List<int> List<int> targetList = List<int>.from(deserialized); print(targetList); }
内容的提问来源于stack exchange,提问作者Dustin Miller
相关产品推荐
相关产品推荐

