【问题标题】:parsing JSON with a decodable?用可解码的解析JSON?
【发布时间】:2018-04-17 09:24:15
【问题描述】:

我有一个JSON 文件:

{
"name": "Jens",
"time": "11.45",
"date": "2018:04:17",
"differentTimestamps":[""]
"aWholeLotOfnames":{
   "name1": "Karl"
   "name2": "pär"
 }

上面的JSON怎么解析?我已经检查了本教程https://www.youtube.com/watch?v=YY3bTxgxWss。一个文本教程,但我不知道如何制作一个可以接受的变量

"nameOfVar"{}

如果不是字典。本教程使用 var nameOfVar: [在这种情况下应该是什么] 用于几乎看起来像它的一个。问题是他们的开头是 [{ 并以 }] 结尾,而我的只是以 {?我不知道如何解决这个问题?

【问题讨论】:

  • ` [{}]` 这是一个字典数组。就这样。如果它是“字符串/整数”,或者每个级别的字典或数组,您需要调整您的解析。
  • 这看起来像一个无效的 JSON,JSON 中不允许重复的键
  • 请举一个更真实的例子。字典有唯一的键,而最后一个字典中的值丢失了。
  • 这是一个示例代码,它是不同的变量名,它只是 JSON 外观的一个示例,我不明白如何创建可解码的字典,因为如果你在类中放置字典,你会得到类与 Decodable 不兼容
  • 现在让它变得更加现实

标签: json swift parsing


【解决方案1】:

为 JSON 创建对应的 Swift 数据类型非常容易。

  • 可以将字典 {} 解码为键成为属性/成员的类/结构。
  • 数组[] 可以解码为给定(可解码)类型的数组。
  • 双引号中的任何值都是String,甚至是"12""false"
  • 数字浮点值为Double,整数值为Inttrue / falseBool
  • nullnil

let jsonString = """
{
    "name": "Jens",
    "time": "11.45",
    "date": "2018:04:17",
    "differentTimestamps":[""],
    "aWholeLotOfnames":{
        "name1": "Karl",
        "name2": "pär"
    }
}
"""

struct Item: Decodable {
    let name, time, date: String
    let differentTimestamps: [String]
    let aWholeLotOfnames: AWholeLotOfnames
}

struct AWholeLotOfnames : Decodable {
    let name1, name2 : String
}

let data = Data(jsonString.utf8)

do {
    let result = try JSONDecoder().decode(Item.self, from: data)
    print(result)
} catch { print(error) }

【讨论】:

  • 第二次我将一个类添加到结构中,它给我的结构不符合可解码协议?
猜你喜欢
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多