ios - 如何阻止 Swift 在我的 [String] 中注入转义的单引号?
问题描述
我正在尝试打印出一个没有转义单引号的字符串数组。出于某种原因,Swift 在打印我的数组时注入了转义的单引号。当我使用数组构建 JSON 时,这有一个涓滴问题。由于转义的单引号,JSON 最终无法解析。
我认为这是我的代码的问题,但我已将其提炼为一个应该简单明了的用例。
let names = ["Tommy 'Tiny' Lister", "Tom Hanks"]
print(names)
输出是:
[“汤米\'小\'李斯特”,“汤姆汉克斯”]
注意:我的名称数组中没有包含转义的单引号。
我该如何防止这种情况发生?
这是我稍后在创建 JSON 的代码中所做的。为简洁起见,这是我正在做的一个非常愚蠢的版本:
var names = ["Tommy Tiny Lister", "Tom Hanks"]
var jsonString = """
{"names": \(names)}
"""
var jsonData = jsonString.data(using: .utf8)
if let json = try? JSONSerialization.jsonObject(with: jsonData!) as? [String: Any] {
let jsonData = try! JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
let string = String(data: jsonData, encoding: .utf8)
print(string!)
}
解决方案
您正在做的是使用 Swift 数组description
生成 JSON:
var jsonString = """
{"names": \(names)}
""" // your JSON will contain name.description
您依赖于这样一个事实,即在大多数description
情况下,恰好发生了与 JSON 相同的格式。如您所见,当数组元素中有时,描述不是有效的 JSON。'
基本上,您不应该依赖于description
生成 JSON。相反,您应该使用Codable
Swift 数组生成 JSON 数据。
对于您要生成的 JSON:
{
"names": ["Tommy 'Tiny' Lister", "Tom Hanks"]
}
您可以使用这样的结构:
struct Names : Codable {
let names: [String]
}
然后你可以Data
像这样生成 JSON:
let encoder = JSONEncoder()
do {
let obj = Names(names: ["Tommy 'Tiny' Lister", "Tom Hanks"])
let data = try encoder.encode(obj)
} catch { ... }
推荐阅读
- c# - 从继承自 AuthorizationHandler 的类访问 ViewBag
- c# - WPF中插件的样式模板
- ios - Swift - 如何在不迭代领域对象集合的情况下批量更新对象
- ios - 项目选择需要在vue js多选中点击IOS两次
- android - 如何在 RecyclerView 中获取适配器位置
- amazon-web-services - AWS JS SDK V3(Lambda 模块)- 无法连接到实例元数据服务
- python-3.x - python中多个页面的数据连接出错
- ruby-on-rails - 如何处理在 Rails 命名空间中找不到的路由?
- kotlin - 无法覆盖应用功能
- javascript - 我想用 Meteor 中当前网页的 pdf 发送电子邮件