将$替换为\$用于Dart消耗(非原始)

将$替换为\$用于Dart消耗(非原始),dart,flutter,Dart,Flutter,这似乎是个简单的问题,但我想不出来 我在JSON对象中有一个字符串,它是由另一种语言生成的,其中包含转义字符和美元符号(应该解释为美元符号)。当我在Dart中使用这个字符串时,它会抱怨$,因为它认为它是一个变量。在字符串前面添加r以将字符串解释为原始字符串是不够的,因为这样它就不会解释任何其他转义字符 例如,给定以下字符串: line 1 costs $250 and\nline 2 costs $300 我需要将其转换为此,以便在Dart中使用: line 1 costs \$250 and

这似乎是个简单的问题,但我想不出来

我在JSON对象中有一个字符串,它是由另一种语言生成的,其中包含转义字符和美元符号(应该解释为美元符号)。当我在Dart中使用这个字符串时,它会抱怨$,因为它认为它是一个变量。在字符串前面添加r以将字符串解释为原始字符串是不够的,因为这样它就不会解释任何其他转义字符

例如,给定以下字符串:

line 1 costs $250 and\nline 2 costs $300
我需要将其转换为此,以便在Dart中使用:

line 1 costs \$250 and\nline 2 costs \$300
我还想为我的转换器创建此条件的测试

我尝试过以下方法,但运气不佳:

String s2 = s1.replaceAll(RegExp(r'\$'),r'\$');
对于测试:

expect(s1, contains('\$'));
expect(s2, contains('\\\$'));

有什么建议吗?

如果字符串来自JSON,则Dart不进行插值


插值仅适用于Dart源代码中的字符串。在您的情况下,无需替换
$

正如@ViniciusPinto所指出的,使用
jsonDecode()
可以避免此问题。

如何加载字符串?如果它是在源文件中定义的,那么直接在编辑器中替换美元符号不是更容易吗?@ViniciusPinto,它通过JSON文件作为遗留数据从任意数量的用户加载。这就是为什么我需要一个通用的解决方案。谢谢。你是如何加载JSON的?AFAIK插值仅适用于源代码中声明的字符串(例如,如果我使用dart:convert中的
jsonDecode()
,它不关心字符串中的$。@ViniciusPinto,感谢您为我指明了正确的路径。我模拟了一些数据,刚刚复制/粘贴了json数据,不得不手动将$更改为\$,但现在我看到,当我使用jsonDecode()时,我不会对真实数据产生这种问题。