我从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);
}
3条答案
按热度按时间4xy9mtcn1#
没有转换为原始字符串这样的事情。原始字符串只是一个Dart语法构造,而不是字符串的属性。
而不是
使用
得到与原始字符串语法相同的字符串表示。
r'xxx'
的意思是按字面意思理解xxx
。如果没有r
,\n
将被转换为实际的换行符。当反斜杠像'\\n'
一样转义时,则将其解释为raw'\n'
。因此,使用原始语法(
r'xxx'
)只会避免分别转义每个\
和$
。参见How do I handle newlines in JSON?
s8vozzvw2#
试试这个:
tkclm6bt3#
你可以这样做: