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

Dart中如何转义美元符号?代码生成场景的实现问题

解决Dart代码生成中保留$转义的问题

问题核心是字符串转义处理逻辑错误:

  • 你定义的{"bar": "\$100"}里,Dart的\$是用来表示字面量$的转义,所以这个字符串的实际值是"$100",根本不包含反斜杠,jsonEncode自然也不会生成反斜杠。
  • 要生成包含\$100的代码,得确保原字符串里有字面量的反斜杠+$,并且输出时正确保留转义。

方案1:直接调整原字符串定义

如果Map是你自己定义的,用以下两种方式之一让字符串包含反斜杠:

// 方式1:使用raw字符串(r前缀),里面的\会被当作字面量处理
final bar = {"bar": r"\$100"};
// 方式2:用双重转义,Dart里两个\表示一个字面量\
// final bar = {"bar": "\\$100"};

final barStr = jsonEncode(bar);
print("""
final foo = $barStr;
""");

运行后输出:

final foo = {"bar":"\$100"};

方案2:处理外部传入的Map

如果Map是外部获取的,字符串本身只有$100,需要给$手动加上反斜杠,可以递归遍历结构处理:

// 假设外部传入的Map是这样的
final bar = {"bar": "$100"};

// 递归处理所有字符串,给$前添加\
dynamic escapeDollar(dynamic value) {
  if (value is String) {
    return value.replaceAll(r'$', r'\$');
  } else if (value is Map) {
    return value.map((k, v) => MapEntry(k, escapeDollar(v)));
  } else if (value is List) {
    return value.map(escapeDollar).toList();
  }
  return value;
}

final escapedBar = escapeDollar(bar);
final barStr = jsonEncode(escapedBar);

print("""
final foo = $barStr;
""");

这样处理后也能得到带\$100的代码输出。

补充说明

jsonEncode会把字符串里的\转义成\\,但当你通过多行字符串插值输出时,Dart会自动将\\解析为单个\,最终生成的代码里就会保留你需要的\$格式。

内容的提问来源于stack exchange,提问作者TSR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:11:15