如何在Dart中提取JSON字符串里引号内的第二个日期时间值?
在Dart中提取JSON指定字段的日期时间值
直接用正则匹配所有引号内容会拿到无关值(比如"State.newState"),更可靠的方式是解析JSON而非正则,步骤如下:
- 导入Dart内置的
dart:convert库处理JSON - 将JSON字符串解析为
Map<String, dynamic> - 直接提取目标字段(
due和lastReview)的值,得到的就是不带引号的日期时间字符串
代码示例
import 'dart:convert'; void main() { final jsonStr = '''{ "due": "2024-04-27 17:50:02.852Z", "stability": 0, "difficulty": 0, "elapsedDays": 0, "scheduledDays": 0, "reps": 0, "lapses": 0, "state": "State.newState", "lastReview": "2024-04-27 17:50:02.852Z" }'''; // 解析JSON为Map final data = jsonDecode(jsonStr) as Map<String, dynamic>; // 提取目标字段值 final dueDate = data['due'] as String; final lastReviewDate = data['lastReview'] as String; print(dueDate); // 输出:2024-04-27 17:50:02.852Z print(lastReviewDate); // 输出:2024-04-27 17:50:02.852Z }
若非要用正则(不推荐)
如果因特殊场景必须用正则,可以针对特定字段编写匹配规则,比如匹配"due": "之后的日期内容:
void main() { final jsonStr = '''{ "due": "2024-04-27 17:50:02.852Z", "stability": 0, "difficulty": 0, "elapsedDays": 0, "scheduledDays": 0, "reps": 0, "lapses": 0, "state": "State.newState", "lastReview": "2024-04-27 17:50:02.852Z" }'''; // 匹配due字段的日期 final dueRegex = RegExp(r'"due": "([^"]+)"'); final dueMatch = dueRegex.firstMatch(jsonStr); if (dueMatch != null) { print(dueMatch.group(1)); // 输出:2024-04-27 17:50:02.852Z } // 匹配lastReview字段的日期 final lastReviewRegex = RegExp(r'"lastReview": "([^"]+)"'); final lastReviewMatch = lastReviewRegex.firstMatch(jsonStr); if (lastReviewMatch != null) { print(lastReviewMatch.group(1)); // 输出:2024-04-27 17:50:02.852Z } }
注意:正则方案仅适用于JSON格式固定的场景,一旦JSON结构调整(比如字段换行、空格变化)就会失效,优先推荐JSON解析方案。
内容的提问来源于stack exchange,提问作者My Name
相关产品推荐
相关产品推荐

