ios - 在 Swift 中从解码的 JSON 中提取字符串数组
问题描述
我正在使用 JSONDecoder 将从 API 获得的 JSON 解码为一个对象数组,每个对象都包含一个感兴趣的键值对。对于该键,我想获得一个值数组(即字符串)。JSON 可以很好地解码成一个数组,但是,我无法使用 Array[key] 为我感兴趣的键提取值数组。我究竟做错了什么?
启动 JSON 如下所示:
[{"word":"hi"},{"word":"howdy"},{"word":"hullo"}]
我的代码:
struct Synonym: Codable {
let word: String
}
typealias Synonyms = [Synonym]
//Code to create session etc and get data
let mysynonyms = try? JSONDecoder().decode(Synonyms.self, from: data)
//everything works fine up to here
var words = mysynonyms?[word]! //THROWS ERROR Use of unresolved identifier 'word'
将不胜感激任何关于为什么最后一行不起作用的建议。
解决方案
var words = (mysynonyms ?? []).map { $0.word }
在类型(结构/类)上使用下标语法[]
在 Swift 中不起作用——相反,您需要使用点语法来获取属性。而且,既然你想要所有的单词,你可以用它map
来转换数组。
我也用??
来表示“如果mysynonyms
是 nil,则映射一个空数组”,所以words
如果[]
是.mysynonyms
nil
推荐阅读
- python - networkx 库的函数 dfs_edges 找不到所有边
- python-3.x - cv2.MORPH_CLOSE 将字母连接在一起
- javascript - 选中复选框时显示文本框并在 php 中发布这两个值
- javascript - Javascript中的图像到Uint8Array
- python - 我已经在 Heroku.where 中部署了 Django 项目
- ruby - Github Pages 上的 Jekyll 设置,捆绑安装的问题
- python - 使用带有 Pathlib 父母方法的负索引
- angular - Angular 实例化 EntryComponent 会创建新服务
- r - R:使用 rbind 时重新打印列标题
- sql - Oracle:单个列的 2 个列名