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

如何在Dart中提取JSON字符串里引号内的第二个日期时间值?

在Dart中提取JSON指定字段的日期时间值

直接用正则匹配所有引号内容会拿到无关值(比如"State.newState"),更可靠的方式是解析JSON而非正则,步骤如下:

  1. 导入Dart内置的dart:convert库处理JSON
  2. 将JSON字符串解析为Map<String, dynamic>
  3. 直接提取目标字段(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:22:06