【问题标题】:Convert String to [[String]]将字符串转换为 [[String]]
【发布时间】:2020-11-22 00:02:24
【问题描述】:

我与[[String]] 合作填充我的收藏视图单元格。

我使用 API 获取这些数据:

{
  identifier: {
    channel: "WorldChannel",
    id: 1
  },
  message: {
    map: "[[null,null,\"penguin\",null,\"penguin\",null,null],[null,\"penguin\",\"penguin\",\"penguin\",\"orca...ll,null,\"penguin\",null,null,null],[\"penguin\",\"penguin\",\"penguin\",null,null,null,null,null]]"
  }
}

要获取我使用的地图值:

struct ResponseData: Codable {
    let message: Message
}
struct Message: Codable {
    let map: String
}

我尝试将map 用作[[String]],但解码给了我以下错误:
CodingKeys(stringValue: "map", intValue: nil)], debugDescription: "期望解码 Array 但找到了一个字符串/数据。" 这似乎是公平的,因为 map 的值被包裹在 " " 中,尽管里面显然是一个二维数组。
解码部分:

let jsonData = string.data(using: .utf8)!
let responseData = try! JSONDecoder().decode(ResponseData.self, from: jsonData)
mapAsString = responseData.message.map

print(maAsString!) 结果:

[[null,"penguin","orca",...],...,[..."penguin",null,null]]

我想做的是类似mapAs2DArray = mapAsString as! [[String]] 但Xcode 说它总是失败。如何更改数据类型?如何将null 替换为nil 或任何其他要操作的值?

【问题讨论】:

    标签: ios json swift xcode api


    【解决方案1】:

    需要将json字符串转为数组

     let data = Data(responseData.message.map.utf8)
     let arr = try JSONDecoder().decode([[String?]].self,from:data)
     let filtered  = arr.map { $0.compactMap{ $0 } } // remove null values 
    

    【讨论】:

    • 成功了! null 值自动替换为 nil。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2021-04-21
    • 2018-09-23
    • 2017-06-05
    相关资源
    最近更新 更多