json - 遍历自定义对象的属性

标签 json swift

我有一个结构如下的 JSON 响应:

{
    "id": {
        "sub_key1": "sub_value1",
        "sub_key2": "sub_value2",
        "sub_key3": "sub_value3",
        "used": false
    },
    "key1": {
        "sub_key1": "sub_value1",
        "sub_key2": "sub_value2",
        "sub_key3": "sub_value3",
        "used": true
    },
    "key2": {
        "sub_key1": "sub_value1",
        "sub_key2": "sub_value2",
        "sub_key3": "sub_value3",
        "used": false
    },
    "key3": {
        "sub_key1": "sub_value1",
        "sub_key2": "sub_value2",
        "sub_key3": "sub_value3",
        "used": true
    },
    "key4": {
        "sub_key1": "sub_value1",
        "sub_key2": "sub_value2",
        "sub_key3": "sub_value3",
        "used": false
    },
    "key5": {
        "sub_key1": "sub_value1",
        "sub_key2": "sub_value2",
        "sub_key3": "sub_value3",
        "used": true
    }
}

我已经为它创建了 Swift 父子结构,如下所示:

家长:

struct Parent: Codable {
    let id: Child?
    let key1: Child?
    let key2: Child?
    let key3: Child?
    let key4: Child?
    let key5: Child?
}

child :

struct Child: Codable {
    let sub_key1: String?
    let sub_key2: String?
    let sub_key3: String?
    let used: Bool?
}

现在,只有部分 Child 对象被使用,具体取决于“已使用”属性,我想过滤掉未使用的 Child 对象。我考虑过使用 map方法,但这只适用于数组。

关于如何解决这个问题有什么想法吗?

最佳答案

我会像这样存储 Parent:

struct Parent {
    let children: [String: Child]
}

这将允许您使用 parent.children.values.filter 过滤子项并为键添加一些动态。

作为旁注:

Swift 4.2 将允许您进行动态调用。这意味着您可以实现:

extension Parent {
    subscript(dynamicMember member: String) -> Child? {
        get {
            return children[member]
        }
        set {
            children[member] = newValue
        }
    }
}

这将允许您仍然调用 parent.key1parent.id 而不会失去可读性。

关于json - 遍历自定义对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52259908/

相关文章:

json - JMeter 脚本到 Postman 的转换

json - 在 AWS Lambda 中使用 GoLang 解析 JSON

java - Java中使用 json-simple 将List转换为JsonObject

java - 使用GSON转换对象的JSON对象

ios - Swift 4 - 在未来的精确时钟时间启动计时器

ios - 尝试在 viewWillAppear 中 reloadData()

ios - 在 Swift UI 中停止旋转动画

Python:如何发送多个 HTTP 请求并接收响应?

swift - 将不带分隔符的字符串转换为 Double/CLLocationDegrees

xcode - GoogleAnalytics - 快速错误