当前位置: 首页 > 面试题库 >

Swift 4解码简单的根级别JSON值

西门伟
2023-03-14
问题内容

根据JSON标准RFC 7159,这是有效的json:

22

如何使用swift4的可解码代码将此解码为Int?这行不通

let twentyTwo = try? JSONDecoder().decode(Int.self, from: "22".data(using: .utf8)!)

问题答案:

它可以很好地JSONSerialization.allowFragments
阅读选项配合使用。从文档中:

allowFragments

指定解析器应允许不是NSArray或NSDictionary实例的顶级对象。

例:

let json = "22".data(using: .utf8)!

if let value = (try? JSONSerialization.jsonObject(with: json, options: .allowFragments)) as? Int {
    print(value) // 22
}

但是,JSONDecoder没有这样的选项,并且不接受不是数组或字典的顶级对象。可以在
源代码中看到该decode()方法调用
JSONSerialization.jsonObject()而没有任何选择:

open func decode<T : Decodable>(_ type: T.Type, from data: Data) throws -> T {
    let topLevel: Any
    do {
       topLevel = try JSONSerialization.jsonObject(with: data)
    } catch {
        throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: error))
    }

    // ...

    return value
}


 类似资料:
  • 问题内容: 所以,我的json中有iso8601日期,看起来像“ 2016-06-07T17:20:00.000 + 02:00” 有没有办法使用swift4解析这些iso8601日期?我缺少明显的东西吗? 我尝试了以下操作,但是仅jsonShipA中的dateString“ 2016-06-07T17:20:00Z”是可解析的…。 游乐场的输出为: 引发的错误是“预期日期字符串为ISO8601格

  • 问题内容: 我正在尝试使用json simple遍历json对象。我看到了答案,您可以从 但是,如果我有东西怎么办 并想要遍历该对象。这个: 抛出: 问题答案: 假设您的JSON对象保存在文件“ simple.json”中,则可以按如下方式遍历属性值对:

  • 有可能用json. Decoder解码顶级JSON数组吗? 或者阅读整个JSON和JSON。在这种情况下,解组是唯一的方法吗? 我已经阅读了这个问题中公认的答案,不知道如何将其与顶级JSON数组一起使用

  • 本文向大家介绍简单了解synchronized和lock的区别,包括了简单了解synchronized和lock的区别的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了简单了解synchronized和lock的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类别 synchronized Lock 存在层次 Java的关键字 一个

  • 本文向大家介绍php制作的简单验证码识别代码,包括了php制作的简单验证码识别代码的使用技巧和注意事项,需要的朋友参考一下 一直想写这个,过了很久今天兴趣来了索性记录下。 验证码 全自动区分计算机和人类的公开图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称

  • 问题内容: 借助Swift 4的Codable协议,可以很好地了解标准日期和数据转换策略。 鉴于JSON: 我想将其强制为以下结构 日期解码策略可以将基于字符串的日期转换为日期。 有什么用基于String的Float做到的吗 否则,我将不得不使用CodingKey引入String并使用计算get: 这种麻烦让我做的维护工作似乎超出了需要。 这是最简单的方法还是其他类型转换与DateDecoding