首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONDecoder格式不正确

JSONDecoder格式不正确
EN

Stack Overflow用户
提问于 2019-03-28 11:04:33
回答 1查看 193关注 0票数 0

我有一个.json文件,里面有一些映射,还有一些有位置的数组。我想把它解码成一个对象,但是我一直收到错误消息,我的.json格式不正确。这可能很愚蠢,但如果有人能帮忙,我们会很感激的。

JSON文件

代码语言:javascript
复制
{
  "Drenthe" : {
    "gebieden" : {
      "Oostermoer" : {
        "latitude" : "52.3520406",
        "longitude" : "4.6575235",
        "name" : "Oostermoer"
      }
    },
    "overige" : {
      "Bergen op zoom" : {
        "latitude" : "51.4918205",
        "longitude" : "4.2931883",
        "name" : "Bergen op zoom"
      }
    },
    "plaatsen" : {
      "Assen" : {
        "latitude" : "52.9948311",
        "longitude" : "6.5591529",
        "name" : "Assen"
      },
      "Beilen" : {
        "latitude" : "52.857755",
        "longitude" : "6.5162114",
        "name" : "Beilen"
      },
      "Borger" : {
        "latitude" : "52.9243981",
        "longitude" : "6.7912636",
        "name" : "Borger"
      }
    },
    "polders" : {
      "Poldersemeer" : {
        "latitude" : "51.82653820831839",
        "longitude" : "4.257233124070814",
        "name" : "Poldersemeer"
      }
    },
    "provincies" : {
      "Drenthe" : {
        "latitude" : "52.90805",
        "longitude" : "6.6888853",
        "name" : "Drenthe"
      }
    },
    "wateren" : {
      "Drentsche Hoofdvaart" : {
        "latitude" : "52.8420101",
        "longitude" : "6.3372173",
        "name" : "Drentsche Hoofdvaart"
      }
    }
  },
  "Flevoland" : {
    "gebieden" : {
      "Oostermoer" : {
        "latitude" : "52.3520406",
        "longitude" : "4.6575235",
        "name" : "Oostermoer"
      }
    },
    "overige" : {
      "Bergen op zoom" : {
        "latitude" : "51.4918205",
        "longitude" : "4.2931883",
        "name" : "Bergen op zoom"
      }
    },
    "plaatsen" : {
      "bierna" : {
        "latitude" : "46.809093",
        "longitude" : "7.62282",
        "name" : "bierna"
      },
      "bosse" : {
        "latitude" : "11.0559304",
        "longitude" : "-14.4189868",
        "name" : "bosse"
      },
      "dsaf" : {
        "latitude" : "52.5168022",
        "longitude" : "5.7156222",
        "name" : "dsaf"
      },
      "isja" : {
        "latitude" : "25.2934148",
        "longitude" : "32.5525225",
        "name" : "isja"
      },
      "lanes" : {
        "latitude" : "43.9283286",
        "longitude" : "-122.8976901",
        "name" : "lanes"
      }
    },
    "polders" : {
      "Poldersemeer" : {
        "latitude" : "51.82653820831839",
        "longitude" : "4.257233124070814",
        "name" : "Poldersemeer"
      }
    },
    "provincies" : {
      "Drenthe" : {
        "latitude" : "52.90805",
        "longitude" : "6.6888853",
        "name" : "Drenthe"
      }
    },
    "wateren" : {
      "Drentsche Hoofdvaart" : {
        "latitude" : "52.8420101",
        "longitude" : "6.3372173",
        "name" : "Drentsche Hoofdvaart"
      },
      "Hoogeveense Vaart" : {
        "latitude" : "52.724406",
        "longitude" : "6.5762008",
        "name" : "Hoogeveense Vaart"
      }
    }
  }
}

地图与定位结构

代码语言:javascript
复制
struct Location: Codable {
    let name, latitude, longitude : String
}

struct Map: Codable {
    var name: String?
    var plaatsen: [Location]?
    var provincies: [Location]?
    var gebieden: [Location]?
    var polders: [Location]?
    var kanalen: [Location]?
    var wateren: [Location]?
    var overige: [Location]?

    init(
        name: String?,
        plaatsen: [Location]?,
        provincies: [Location]?,
        gebieden: [Location]?,
        polders: [Location]?,
        kanalen: [Location]?,
        wateren: [Location]?,
        overige: [Location]?
    )
    {
        self.name = name
        self.plaatsen = plaatsen
        self.provincies = provincies
        self.gebieden = gebieden
        self.polders = polders
        self.kanalen = kanalen
        self.wateren = wateren
        self.overige = overige
    }
}

检索JSON

代码语言:javascript
复制
// Getting the maps.json file
    if let path = Bundle.main.path(forResource: "maps", ofType: "json") {
        do {
            let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
                do {
                    let decoder = JSONDecoder()
                    let mapDecoded = try decoder.decode(Map.self, from: data)
                    print(mapDecoded)
                } catch {
                    print("error trying to convert data to JSON")
                    print(error.localizedDescription)
            }
        } catch {
            // handle error
            print(error.localizedDescription)
        }
    }

编辑我不想使用像https://app.quicktype.io这样的东西,因为它们都有相同的格式,我想在json文件中放更多的地图

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 11:08:35

你需要

代码语言:javascript
复制
struct Map: Codable {
    let drenthe: Drenthe

    enum CodingKeys: String, CodingKey {
        case drenthe = "Drenthe"
    }
}

struct Drenthe: Codable {
    let gebieden: Gebieden
    let overige: Overige
    let plaatsen: Plaatsen
    let polders: Polders
    let provincies: Provincies
    let wateren: Wateren
}

struct Gebieden: Codable {
    let oostermoer: Oostermoer

    enum CodingKeys: String, CodingKey {
        case oostermoer = "Oostermoer"
    }
}

struct Oostermoer: Codable {
    let latitude, longitude, name: String
}

struct Overige: Codable {
    let bergenOpZoom: Oostermoer

    enum CodingKeys: String, CodingKey {
        case bergenOpZoom = "Bergen op zoom"
    }
}

struct Plaatsen: Codable {
    let assen, beilen, borger: Oostermoer

    enum CodingKeys: String, CodingKey {
        case assen = "Assen"
        case beilen = "Beilen"
        case borger = "Borger"
    }
}

struct Polders: Codable {
    let poldersemeer: Oostermoer

    enum CodingKeys: String, CodingKey {
        case poldersemeer = "Poldersemeer"
    }
}

struct Provincies: Codable {
    let drenthe: Oostermoer

    enum CodingKeys: String, CodingKey {
        case drenthe = "Drenthe"
    }
}

struct Wateren: Codable {
    let drentscheHoofdvaart: Oostermoer

    enum CodingKeys: String, CodingKey {
        case drentscheHoofdvaart = "Drentsche Hoofdvaart"
    }
}
代码语言:javascript
复制
do {
    let decoder = JSONDecoder()
    let mapDecoded = try decoder.decode(Map.self, from: data)
    print(mapDecoded)
} catch { 
    print(error)   // << Don't forget this 
}

也用

代码语言:javascript
复制
if let url = Bundle.main.url(forResource: "maps", withExtension: "json") { }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55396003

复制
相关文章

相似问题

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