首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何解码swift中有动态键值的json?

在Swift中解码具有动态键值的JSON可以使用Codable协议和KeyedDecodingContainer来实现。下面是一个解码具有动态键值的JSON的示例代码:

代码语言:txt
复制
struct DynamicJSON: Codable {
    private var dynamicValues: [String: Any]

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: DynamicCodingKeys.self)
        dynamicValues = [String: Any]()

        for key in container.allKeys {
            if let value = try? container.decode(Bool.self, forKey: key) {
                dynamicValues[key.stringValue] = value
            } else if let value = try? container.decode(Int.self, forKey: key) {
                dynamicValues[key.stringValue] = value
            } else if let value = try? container.decode(Double.self, forKey: key) {
                dynamicValues[key.stringValue] = value
            } else if let value = try? container.decode(String.self, forKey: key) {
                dynamicValues[key.stringValue] = value
            }
        }
    }

    func value<T>(forKey key: String) -> T? {
        return dynamicValues[key] as? T
    }

    private struct DynamicCodingKeys: CodingKey {
        var stringValue: String
        init?(stringValue: String) {
            self.stringValue = stringValue
        }

        var intValue: Int? { return nil }
        init?(intValue: Int) { return nil }
    }
}

使用上述代码,你可以解码具有动态键值的JSON并访问其中的值。例如,假设你有以下JSON数据:

代码语言:txt
复制
{
    "name": "John",
    "age": 25,
    "isStudent": true
}

你可以按照以下方式解码和访问该JSON:

代码语言:txt
复制
let json = """
{
    "name": "John",
    "age": 25,
    "isStudent": true
}
"""

let jsonData = json.data(using: .utf8)!
let decoder = JSONDecoder()

do {
    let dynamicJSON = try decoder.decode(DynamicJSON.self, from: jsonData)

    let name: String? = dynamicJSON.value(forKey: "name")
    let age: Int? = dynamicJSON.value(forKey: "age")
    let isStudent: Bool? = dynamicJSON.value(forKey: "isStudent")

    print(name)        // 输出: Optional("John")
    print(age)         // 输出: Optional(25)
    print(isStudent)   // 输出: Optional(true)
} catch {
    print("解码失败: \(error)")
}

在上述示例中,我们首先将JSON数据转换为Data对象,然后使用JSONDecoder进行解码。解码后,我们可以使用value(forKey:)方法从DynamicJSON对象中获取特定键的值。

请注意,上述示例代码只处理了BoolIntDoubleString类型的值。如果你的JSON中包含其他类型的值,你需要根据需要进行相应的修改和扩展。

关于腾讯云相关产品和产品介绍链接地址,我无法提供具体的链接,但你可以访问腾讯云的官方网站以获取相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券