首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Swift Decodable解析JSON

无法使用Swift Decodable解析JSON
EN

Stack Overflow用户
提问于 2018-03-14 23:27:53
回答 1查看 132关注 0票数 0

解析JSON Swift 4

这个想法是为了获取Facebook页面的所有事件,而我不想使用Facebook API。问题是它不能解析。以下是可能帮助您理解问题的所有文件和代码:

从一个URL中,我得到了这个JSON数据:

代码语言:javascript
复制
{
 "events": {
   "data": [
      {
    "description": "Les groupes Do Lung, BROKEN CASH MACHINE et Hobe font aussi leur rentrée en septembre ! Venez très nombreux à ce magnifique concert au Quartier Général d'Oberkampf à 20h30 ! Do Lung entame la soirée avec un set de 45min endiablé, la soirée enchaîne avec BROKEN CASH MACHINE pour une heure de Post-Rock et enfin Hobe fini la soirée avec un son rock alternatif.
    Le lieu : https://www.facebook.com/QuartierGeneralOberkampf/",
    "end_time": "2017-09-22T00:00:00+0200",
    "name": "Concert au Quartier Général d'Oberkampf !",
    "place": {
      "name": "Quartier Général Oberkampf",
      "location": {
        "city": "Paris",
        "country": "France",
        "latitude": 48.865731081726,
        "longitude": 2.3771667480469,
        "street": "103 Rue Oberkampf",
        "zip": "75011"
      },
      "id": "581262352022480"
    },
    "start_time": "2017-09-21T20:30:00+0200",
    "id": "463762790669327"
  }
  ],
  "paging": {
    "cursors": { 
       "before":"QVFIUnBKbUFfSFl",
       "after": "QVFIUlFWMWFUTWt6ZAWxRRW16c"
       }
     }
   },
"id": "757545174356489"
}

如果它放得不是很好,请原谅。但我很确定你知道密码了。我也只放了一个事件。但在data[]中有很多。

我在Swift中的所有结构:

代码语言:javascript
复制
struct requestEvent: Decodable {
    var events: Events
    var id: String
}

struct Events: Decodable {
    var eventList: [Event]
    var paging: Paging

    private enum CodingKeys: String, CodingKey {
        case eventList = "data"
        case paging
    }
}

struct Paging: Decodable {
    var cursors: Cursors
}

struct Cursors: Decodable {
    var before: String
    var after: String

    private enum CodingKeys: String, CodingKey {
        case before
        case after
    }
}

struct Event: Decodable {
     var description: String
     var endTime: String
     var name: String
     var place: Place
     var startTime: String
     var id: String

     private enum CodingKeys: String, CodingKey {
         case description
         case endTime = "end_time"
         case name
         case place
         case startTime = "start_time"
         case id
     }
}

struct Place: Decodable {
    var name: String
    var location: Location
    var id: String
}

struct Location: Decodable {
    var city: String
    var country: String
    var latitude: Float?
    var longitude: Float?
    var street: String
    var zip: String
}

最后是我的代码

代码语言:javascript
复制
guard let Request = try? JSONDecoder().decode(requestEvent.self,
     from: cleanData) else {
            print("Couldn't Parse data")
            return
        }

好吧,我知道这有点长,但我真的需要帮助。对你们中的大多数人来说,这可能很容易。

当然,当我启动应用程序时,我得到“无法解析数据”,并且我知道“data”具有良好的数据,因为我每次都会打印它。

编辑

我加了“?”设置为结构位置的id和位置。而且它看起来工作得很好。谢谢你的回答,但这对我来说很神秘,哈哈!

EN

回答 1

Stack Overflow用户

发布于 2018-03-14 23:58:58

您的JSON格式不正确。说明字段中间的换行符无效(请将其替换为\n)。

该值或description值未终止,并且Le lieu键未正确引用。

并停止丢弃抛出的错误。

代码语言:javascript
复制
do 
{
    let request = try JSONDecoder().decode(requestEvent.self, from: cleanData)
}
catch 
{
   print("Couldn't Parse data because... \(error)")
}

将打印一条错误消息,这可能有助于调试。

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

https://stackoverflow.com/questions/49281700

复制
相关文章

相似问题

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