如何阻止 Swift 在我的 [String] 中注入转义的单引号?
Posted
技术标签:
【中文标题】如何阻止 Swift 在我的 [String] 中注入转义的单引号?【英文标题】:How do I stop Swift from injecting escaped single quotes in my [String]? 【发布时间】:2019-08-22 22:21:02 【问题描述】:我正在尝试打印一个没有转义单引号的字符串数组。出于某种原因,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!)
【问题讨论】:
这只是字符串的调试表示 是的,但是当我添加这个数组来生成 JSON 时,会出现转义的引号......我可能需要一点时间来发布一个示例...... 【参考方案1】:您正在做的是使用 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]
然后您可以像这样生成 JSON Data
:
let encoder = JSONEncoder()
do
let obj = Names(names: ["Tommy 'Tiny' Lister", "Tom Hanks"])
let data = try encoder.encode(obj)
catch ...
【讨论】:
是的......呃......我想我做了一个错误的假设......我可能应该在任何地方都这样做。谢谢! @TNo 如果您认为我的回答回答了您的问题,请考虑通过单击该复选标记接受它!以上是关于如何阻止 Swift 在我的 [String] 中注入转义的单引号?的主要内容,如果未能解决你的问题,请参考以下文章
如何阻止用户,如果他/她在我的应用程序加载时没有连接到互联网连接
Swift - UITableView 中的标题阻止按钮交互
Swift 4.x/5.x 中是不是有多个全局变量副本?如果是这样,你如何阻止它?