Swift中如何将数组格式的字符串转换为原生数组类型
问题背景
持有的原始字符串内容:"[\"0\", \"0\", \"1\", \"0\", \"0\", \"0\", \"0\"]"
期望转换得到的目标数组:["1","1","1","1","1","1","1"]
已尝试的无效方案
方案1
直接对字符串调用map方法遍历,代码如下:
let test = "[\"0\", \"0\", \"1\", \"0\", \"0\", \"0\", \"0\"]" let array = test.map( { String($0) }) debugPrint(array ?? []) // 无效
失效原因:String的map方法会逐字符遍历字符串内容,把每个字符单独转成字符串元素,根本不会识别JSON数组的结构边界,得到的结果是拆分到单个[、"、0这类字符的数组,和预期完全不符。
方案2
自定义转义字符替换逻辑,代码如下:
var unescaped: String { let entities = ["\0": "\\0", "\t": "\\t", "\n": "\\n", "\r": "\\r", "\"": "\\\"", "\'": "\\'", "": "\"", ] return entities .reduce(self) { (string, entity) in string.replacingOccurrences(of: entity.value, with: entity.key) } .replacingOccurrences(of: "\\\\(?!\\\\)", with: "", options: .regularExpression) .replacingOccurrences(of: "\\\\", with: "\\") } debugPrint("[\"0\", \"0\", \"1\", \"0\", \"0\", \"0\", \"0\"]".unescaped) // 无效
失效原因:
- 映射表中存在空字符串作为key的错误项,会导致替换逻辑异常
- 就算转义逻辑完全正确,最终得到的也只是去掉转义符的普通字符串,不会自动转换成[String]数组类型
- 手写转义规则覆盖不全,遇到特殊字符、嵌套结构很容易出问题
可行实现方案
你持有的字符串本质是标准格式的JSON数组序列化结果,不需要手写转义、拆分逻辑,直接调用系统原生JSON解析API即可,解析完成后按需求把所有元素替换为"1"就能得到目标结果。
方案1:使用JSONSerialization实现
import Foundation let rawString = "[\"0\", \"0\", \"1\", \"0\", \"0\", \"0\", \"0\"]" // 字符串转Data后解析为字符串数组 guard let jsonData = rawString.data(using: .utf8), let originArray = try? JSONSerialization.jsonObject(with: jsonData) as? [String] else { // 处理解析失败的异常场景 print("JSON解析失败") exit(0) } // 生成和原数组长度一致、所有元素为"1"的目标数组 let targetArray = [String](repeating: "1", count: originArray.count) debugPrint(targetArray) // 输出: ["1", "1", "1", "1", "1", "1", "1"]
方案2:使用Codable实现(Swift原生推荐写法)
import Foundation let rawString = "[\"0\", \"0\", \"1\", \"0\", \"0\", \"0\", \"0\"]" guard let jsonData = rawString.data(using: .utf8) else { print("字符串转Data失败") exit(0) } do { let originArray = try JSONDecoder().decode([String].self, from: jsonData) let targetArray = [String](repeating: "1", count: originArray.count) debugPrint(targetArray) // 输出: ["1", "1", "1", "1", "1", "1", "1"] } catch { print("解析错误: \(error.localizedDescription)") }
注意:处理JSON格式的字符串时,永远优先使用标准库提供的解析API,不要自己手写字符串拆分、转义替换逻辑,否则很容易漏掉边界case(比如元素内含逗号、引号、转义特殊字符的场景),导致代码稳定性极差。
内容的提问来源于stack exchange,提问作者Naresh
相关产品推荐
相关产品推荐

