gpt4 book ai didi

ios - 如何阻止 Swift 在我的 [String] 中注入(inject)转义单引号?

转载 作者:行者123 更新时间:2023-11-29 05:30:42 34 4
gpt4 key购买 nike

我正在尝试打印一个不带转义单引号的字符串数组。由于某种原因,Swift 在打印数组时会注入(inject)转义的单引号。当我使用数组构建 JSON 时,存在一个向下渗透的问题。由于转义的单引号,JSON 最终无法解析。

我认为这是我的代码的问题,但我已将其简化为一个应该很简单的用例。

let names = ["Tommy 'Tiny' Lister", "Tom Hanks"]
print(names)

输出为:

[“汤米‘小小’李斯特”、“汤姆·汉克斯”]

Note: I did not include escaped single quotes in my names array.

如何防止这种情况发生?

这是我稍后在代码中创建 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。

基本上,您不应依赖描述来生成 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 { ... }

关于ios - 如何阻止 Swift 在我的 [String] 中注入(inject)转义单引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617675/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com