代码之家  ›  专栏  ›  技术社区  ›  Lorenzo B

解码单个值时对JSONDecoder的说明

  •  0
  • Lorenzo B  · 技术社区  · 2 年前

    我试着对 JSONDecoder 我遇到了一个奇怪的行为。特别是,当我使用以下代码时,会抛出一个错误。

    let data = "Sample String".data(using: .utf8)!
    
    do {
        let decoder = JSONDecoder()
        let decoded = try decoder.decode(String.self, from: data)
        print(decoded)
    } catch {
        print(error)
    }
    

    dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的JSON。”,underlyingError:可选(错误域=NSCocoaErrorDomain代码=3840“第1行第0列周围的值无效。”UserInfo={NSDebugDescription=第1行、第0列附近的值无效,NSJSONSerializationErrorIndex=0})))

    相反,如果我把一个数字作为字符串 Int.self 作为解码类型,正确打印值。

    let data = "100".data(using: .utf8)!
    
    do {
        let decoder = JSONDecoder()
        let decoded = try decoder.decode(Int.self, from: data)
        print(decoded)
    } catch {
        print(error)
    }
    

    100

    发生这种情况的原因是什么?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Raildex    2 年前

    因为 some string 不是有效的json,但 "some string" 是 字符串中需要引号:

    let data = "\"Sample String\"".data(using: .utf8)!