gpt4 book ai didi

ios - 在 swift 中将 JSON 字符串数组转换为 NSArray

转载 作者:行者123 更新时间:2023-11-29 05:28:46 31 4
gpt4 key购买 nike

我在某些关键方面收到了类似的回复,例如:

"abc" : "[{\"ischeck\":true,\"type\":\"Some type\"},{\"ischeck\":false,\"type\":\"other type\"}]"]"

我需要将其转换为普通数组。我正在使用以下函数来实现此目的。

[{"ischeck": true, "type":"Some type"},{"ischeck": true, "type":"other type"}]
func fromJSON(string: String) throws -> [[String: Any]] {
let data = string.data(using: .utf8)!
guard let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) as? [AnyObject] else {
throw NSError(domain: NSCocoaErrorDomain, code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid JSON"])
}
//swiftlint:disable:next force_cast
return jsonObject.map { $0 as! [String: Any] }
}

最佳答案

您必须调用 JSONSerialization.jsonObject 两次。首先反序列化根对象,然后反序列化键 abc 的 JSON 字符串。

func fromJSON(string: String) throws -> [[String: Any]] {
let data = Data(string.utf8)
guard let rootObject = try JSONSerialization.jsonObject(with: data) as? [String:String],
let innerJSON = rootObject["abc"] else {
throw NSError(domain: NSCocoaErrorDomain, code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid JSON"])
}
let innerData = Data(innerJSON.utf8)
guard let innerObject = try JSONSerialization.jsonObject(with: innerData) as? [[String:Any]] else {
throw NSError(domain: NSCocoaErrorDomain, code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid JSON"])
}
return innerObject
}
<小时/>

另一种更方便的方法是使用 Decodable 解码字符串

let jsonString = """
{"abc":"[{\\"ischeck\\":true,\\"type\\":\\"Some type\\"},{\\"ischeck\\":false,\\"type\\":\\"other type\\"}]"}
"""

struct Root : Decodable {
let abc : [Item]

private enum CodingKeys : String, CodingKey { case abc }

init(from decoder : Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let abcString = try container.decode(String.self, forKey: .abc)
abc = try JSONDecoder().decode([Item].self, from: Data(abcString.utf8))
}
}

struct Item : Decodable {
let ischeck : Bool
let type : String
}

do {
let result = try JSONDecoder().decode(Root.self, from: Data(jsonString.utf8))
print(result.abc)
} catch {
print(error)
}

关于ios - 在 swift 中将 JSON 字符串数组转换为 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57885173/

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