没有与键解析 json 关联的值
Posted
技术标签:
【中文标题】没有与键解析 json 关联的值【英文标题】:No value associated with key parse json 【发布时间】:2018-12-13 09:20:53 【问题描述】:大家好,我想解码这个 json 数据,我想得到 城市,但是如果删除我模型中的位置,它会失败,而其他人很好。谁能帮帮我这是我的代码。
"results":
"datetime": [
"times":
"Imsak": "04:07",
"Sunrise": "05:32",
"Fajr": "04:17",
"Dhuhr": "11:47",
"Asr": "15:14",
"Sunset": "18:02",
"Maghrib": "18:16",
"Isha": "19:13",
"Midnight": "23:10"
,
"date":
"timestamp": 1544659200,
"gregorian": "2018-12-13",
"hijri": "1440-04-06"
],
"location":
"latitude": -6.2375,
"longitude": 106.69556,
"elevation": 26,
"city": "Ciputat",
"country": "Republic of Indonesia",
"country_code": "ID",
"timezone": "Asia/Jakarta",
"local_offset": 7
这是我的模型对象,其中城市关联键中没有值没有值,但奇怪的是,如果删除结构结果下的 var 位置并且所有关联它工作正常,只有位置是问题。
struct PrayerModel: Decodable
var results: Results
struct Results: Decodable
var datetime: [DateTime]
var location: Location
struct Location: Decodable
var city: String
init(dictionary: [String: String])
self.city = dictionary["city"] ?? ""
struct DateTime: Decodable
var times: Times
struct Times: Decodable
var Imsak: String
var Sunrise: String
var Fajr: String
var Dhuhr: String
var Asr: String
var Sunset: String
var Maghrib: String
var Isha: String
var Midnight: String
init(dictionary: [String: String])
self.Imsak = dictionary["Imsak"] ?? ""
self.Sunrise = dictionary["Sunrise"] ?? ""
self.Fajr = dictionary["Fajr"] ?? ""
self.Dhuhr = dictionary["Dhuhr"] ?? ""
self.Asr = dictionary["Asr"] ?? ""
self.Sunset = dictionary["Sunset"] ?? ""
self.Maghrib = dictionary["Maghrib"] ?? ""
self.Isha = dictionary["Isha"] ?? ""
self.Midnight = dictionary["Midnight"] ?? ""
这是我的错误出现的地方,错误在哪里?我想不通
Failed to decode data: keyNotFound(CodingKeys(stringValue: "city", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "results", intValue: nil), CodingKeys(stringValue: "location", intValue: nil)], debugDescription: "No value associated with key CodingKeys(stringValue: \"city\", intValue: nil) (\"city\").", underlyingError: nil))
【问题讨论】:
可能是城市缺少真实响应 @Sh_Khan 缺少真正的回应是什么意思? 您显示的 JSON 是导致问题的完整 JSON,还是只是一个示例?它是导致崩溃的原因吗?或者是另一个?可能导致错误的原因是,在一种情况下,没有城市值(或为零),它会导致崩溃。 【参考方案1】:这对我有用,不知道你为什么使用 Codable 字典中的 init
import UIKit
import PlaygroundSupport
let jsonData = """
"results":
"datetime": [
"times":
"Imsak": "04:07",
"Sunrise": "05:32",
"Fajr": "04:17",
"Dhuhr": "11:47",
"Asr": "15:14",
"Sunset": "18:02",
"Maghrib": "18:16",
"Isha": "19:13",
"Midnight": "23:10"
,
"date":
"timestamp": 1544659200,
"gregorian": "2018-12-13",
"hijri": "1440-04-06"
],
"location":
"latitude": -6.2375,
"longitude": 106.69556,
"elevation": 26,
"city": "Ciputat",
"country": "Republic of Indonesia",
"country_code": "ID",
"timezone": "Asia/Jakarta",
"local_offset": 7
""".data(using: .utf8)!
struct PrayerModel: Decodable
var results: Results
struct Results: Decodable
var datetime: [DateTime]
var location: Location
struct Location: Decodable
var city: String
struct DateTime: Decodable
var times: Times
struct Times: Decodable
var Imsak: String
var Sunrise: String
var Fajr: String
var Dhuhr: String
var Asr: String
var Sunset: String
var Maghrib: String
var Isha: String
var Midnight: String
do
let result = try JSONDecoder().decode(PrayerModel.self, from: jsonData)
print(result)
print("city: \(result.results.location.city)")
catch
print(error)
输出:
PrayerModel(results: __lldb_expr_53.Results(datetime: [__lldb_expr_53.DateTime(times: __lldb_expr_53.Times(Imsak: "04:07", Sunrise: "05:32", Fajr: "04:17", Dhuhr: “11:47”,Asr:“15:14”,日落:“18:02”,马格里布:“18:16”,Isha:“19:13”,午夜:“23:10”))],位置: __lldb_expr_53.Location(city: "Ciputat")))
城市:锡普塔特
【讨论】:
我试试你的,但它仍然显示错误没有价值。这就是为什么它让我感到困惑。是bug还是什么? 检查您的响应是否符合预期,只需将其转换为字符串并检查即可。 试试这个var city: String?
@Sh_Khan 响应是城市为零。怎么是零?
@ferryawijayanto 如果您的 API 不返回数据,除非您可以控制 API,否则您无能为力。您可以尝试通过映射 API(苹果内置或谷歌会这样做)对纬度/经度进行反向地理编码,以查找纬度/经度并查看是否获得更多信息以上是关于没有与键解析 json 关联的值的主要内容,如果未能解决你的问题,请参考以下文章