在Dart中将现有字符串转换为原始字符串

3yhwsihp  于 2023-05-11  发布在  其他
关注(0)|答案(3)|浏览(153)

我从HTTP响应中解码字符串时得到FormatException。这是因为字符串中的\n字符。当我将字符串转换为原始字符串时,它就可以工作。
声明一个原始字符串很容易

String raw = r'Hello \n World';

但是如何将现有字符串转换为原始字符串呢?

String notRaw = 'Hello \n World';

String raw = r'${notRaw}';

上面的语句不起作用,因为在r'被视为原始字符串之后一切都是如此。
我有两个问题
1)如何避免在解码JSON时出现\n问题。2)如何将现有的字符串变量转换为原始字符串。

import 'dart:convert';

void main() {

      var jsonRes = """
    {
            "response-list": {
                "response": [
                    {
                        "attribute": {
                            "@name": "Problem",
                            "@isEditable": false,
                            "@value": "Services fail to respond; for example:\n\n1) unable to connect.\n2) Slow response on the console.\n3)no response."
                        }
                    }
                ]
            }
        }
        """;
var jsonStr = json.decode(jsonRes);
print (jsonRes);
}

转换为原始字符串

import 'dart:convert';

void main() {

      var jsonRes = r"""
    {
            "response-list": {
                "response": [
                    {
                        "attribute": {
                            "@name": "Problem",
                            "@isEditable": false,
                            "@value": "Services fail to respond; for example:\n\n1) unable to connect.\n2) Slow response on the console.\n3)no response."
                        }
                    }
                ]
            }
        }
        """;
var jsonStr = json.decode(jsonRes);
print (jsonRes);
}
4xy9mtcn

4xy9mtcn1#

没有转换为原始字符串这样的事情。原始字符串只是一个Dart语法构造,而不是字符串的属性。
而不是

String notRaw = 'Hello \n World';

使用

String notRaw = 'Hello \\n World';

得到与原始字符串语法相同的字符串表示。
r'xxx'的意思是按字面意思理解xxx。如果没有r\n将被转换为实际的换行符。当反斜杠像'\\n'一样转义时,则将其解释为raw '\n'
因此,使用原始语法(r'xxx')只会避免分别转义每个\$
参见How do I handle newlines in JSON?

s8vozzvw

s8vozzvw2#

试试这个:

String string2Raw(String x) => '\r$x';
tkclm6bt

tkclm6bt3#

你可以这样做:

String notRaw = 'Hello \n World';
String raw = notRaw.replaceAll('\n', r'\n');

相关问题