【问题标题】:Extract Array of Strings from Decoded JSON in Swift在 Swift 中从解码的 JSON 中提取字符串数组
【发布时间】:2021-06-13 23:33:56
【问题描述】:

我正在使用 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'

如果对最后一行不起作用的任何建议,我们将不胜感激。

【问题讨论】:

    标签: ios arrays swift key-value jsondecoder


    【解决方案1】:

    var words = (mysynonyms ?? []).map { $0.word }

    在类型(结构/类)上使用[] 下标语法在 Swift 中不起作用——相反,您需要使用点语法来获取属性。而且,由于您想要所有的单词,您可以使用map 来转换数组。

    我还使用?? 表示“如果mysynonyms 为nil,则映射一个空数组”,因此words 将是[],如果mysynonymsnil

    【讨论】:

    • Swift 5.2 或更高版本您可以使用 keyPath 和 map mysynonyms?.map(\.word) ?? []
    • 谢谢,卡车做到了。
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多