如果 json 数据包含换行符,则 Swift 4 无法正确解码 ( "n" )


如果json数据包含新行("\n"(,Swift 4将无法正确解码。我能为这个案子做些什么。请看一下我的样本代码:
var userData = """
[
{
"userId": 1,
"id": 1,
"title": "Title n with newline",
"completed": false
}
]
""".data(using: .utf8)
struct User: Codable{
var userId: Int
var id: Int
var title: String
var completed: Bool
}
do {
//here dataResponse received from a network request
let decoder = JSONDecoder()
let model = try decoder.decode([User].self, from:userData!) //Decode JSON Response Data
print(model)
} catch let parsingError {
print("Error", parsingError)
}

如果我将userData值更改为如下所示,那么它可以正确解码。

var userData = """
[
{
"userId": 1,
"id": 1,
"title": "Title \n with newline",
"completed": false
}
]
""".data(using: .utf8)

这是无效的JSON。""[{"userId":1,"id":1,"title":"标题\n带换行符","已完成":false}]"">

请使用以下代码

var userData : [[String:Any]] =
[
[
"userId": 1,
"id": 1,
"title": "Title n with newline",
"completed": false
]
]
struct User: Codable{
var userId: Int
var id: Int
var title: String
var completed: Bool
}
do {
//here dataResponse received from a network request
let data = try? JSONSerialization.data(withJSONObject: userData, options: 
[])
let decoder = JSONDecoder()
let model = try decoder.decode([User].self, from:data!) //Decode JSON 
Response Data
print(model)
} catch let parsingError {
print("Error", parsingError)
}

这是无效的JSON:

"""
[
{
"userId": 1,
"id": 1,
"title": "Title n with newline",
"completed": false
}
]
"""

因为这是用swift编写的,所以n表示整个JSON字符串中的一个新行。上面的字符串文字表示这个字符串:

[
{
"userId": 1,
"id": 1,
"title": "Title 
with newline",
"completed": false
}
]

显然,这不是有效的JSON。但是,如果使用\n,则表示Swift中的反斜杠和n。现在JSON是有效的:

[
{
"userId": 1,
"id": 1,
"title": "Title n with newline",
"completed": false
}
]

您不需要担心这一点,因为无论哪个服务器提供这些数据,都应该为您提供有效的JSON。您可能已经将响应直接复制并粘贴到Swift字符串文字中,忘记了转义反斜杠。如果您以编程方式获得响应,则实际上不会发生这种情况。

相关内容

  • 没有找到相关文章

最新更新