首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Swift JSONDecoder处理JSON

使用Swift JSONDecoder处理JSON
EN

Stack Overflow用户
提问于 2018-07-12 00:59:07
回答 0查看 383关注 0票数 1

下面是我正在尝试解析的JSON

代码语言:javascript
复制
{
  "rows": [
    {
      "layout": "Y",
    },
    {
      "layout": "A",
    }
  ]
}

我希望能够过滤掉不支持的布局类型。我使用JSONDecoder将JSON数据转换为结构,但在处理行时遇到问题。我正在尝试使用let row = try?rowContainer.decode(Row.self),但是如果它失败了,我可以弄清楚如何移动到下一个,除非我将它解码为一个空结构。我试着把它解码成一个字典,但它不会排除任何值字段。

代码语言:javascript
复制
enum RowType: String, Codable {
    case a = "A"
    case b = "B"
}

public struct Page: Codable {

    let rows: [Row]

    public init(from decoder: Decoder) throws {

        // Get Container
        let container = try decoder.container(keyedBy: CodingKeys.self)

        // Create Result Array
        var rowResult: [Row] = []

        // Get Rows Container
        var rowContainer = try container.nestedUnkeyedContainer(forKey: .rows)

        // Process Rows
        while !rowContainer.isAtEnd {

            // Create Row
            if let row = try? rowContainer.decode(Row.self) {
                rowResult.append(row)
            }
            else {

                // Increment Row Container
                _ = try rowContainer.decode(Empty.self)
            }
        }

        // Set Result
        rows = rowResult
    }

    // Used For Unsupported Rows
    struct Empty: Codable {}
}

public struct Row: Codable {
    let layout: RowType
}
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51290784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档