我在解析Json文件时遇到问题。尝试解析一个Json文件:
{
"id": 1234,
"lists": {
"pause": {
"attached": [
{
"from": 1576680044000,
"to": 1576680055000,
"length": 11000
}
]
}
},
"time": {
"start_time": 1576680044000,
"end_time": 1576680055000
}
}
这是我为其定义的两个结构。
暂停结构:
public struct Pause: Decodable {
public let attached: [AttachedModel]
init(badlAttached: [AttachedModel] = []) {
self.attached = attached
}
private enum CodingKeys: String, CodingKey {
case attached = "attached"
}
}
AttachedModel模型结构:
public struct AttachedModel: Decodable {
private enum CodingKeys: CodingKey {
case from, to
}
public let range: Range<Int64>
init(range: Range<Int64>) {
self.range = range
}
public init(from decoder: Decoder) throws {
do {
let rootContainer = try decoder.container(keyedBy: CodingKeys.self)
let from: Int64 = try rootContainer.decode(key: .from)
let to: Int64 = try rootContainer.decode(key: .to)
range = from ..< to
} catch {
throw JSONDecoder.DecodingError(type: type(of: self), payload: error)
}
}
}
然后,我为其创建一个键和一个函数:
enum Key: String {
case lists
case pause = "pause"
}
func pause() throws -> Pause? {
let seriesJSON = try lists()
if let json = seriesJSON[Key.pause.rawValue] as? [String: Any] {
return try JSONDecoder().decode(Pause.self, from: json) //It's never called
} else {
return nil
}
}
在功能上lists()
:
func lists() throws -> [String: Any] {
let json: [String: Any] = try payload.valueForRequiredKey(Key. lists.rawValue)
return json
}
这是输出 list()
[1] = {
key = "pause"
value = {
payload_data_0 = 0x0000600001af8a10 {
ObjectiveC.NSObject = {
baseNSObject@0 = {
isa = __NSSingleObjectArrayI
}
}
}
payload_data_1 = 0x544e786f6a497768
payload_data_2 = 0x444f3363544e3363
instance_type = 0x00007fe02f877ed0
}
}
问题是,即使pause
有数据,该行也始终为假if let json = seriesJSON[Key.pause.rawValue] as? [String: Any] {
,并且转到“ nil
有人可以告诉我这里的问题在哪里吗?
为您的json创建此模型类:
import Foundation
class MyItem: Codable {
let id: Int
let lists: Lists
let time: Time
}
class Lists: Codable {
let pause: Pause
}
class Pause: Codable {
let attached: [Attached]
}
class Attached: Codable {
let from, to, length: Int
}
class Time: Codable {
let start_time, end_time: Int
}
// MARK: - Helper functions for creating encoders and decoders
fileprivate func newJSONDecoder() -> JSONDecoder {
let decoder = JSONDecoder()
if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
decoder.dateDecodingStrategy = .iso8601
}
return decoder
}
fileprivate func newJSONEncoder() -> JSONEncoder {
let encoder = JSONEncoder()
if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
encoder.dateEncodingStrategy = .iso8601
}
return encoder
}
然后,您可以像这样解析它:
let myItem = try? newJSONDecoder().decode(MyItem.self, from: jsonData)
// Read from (for example)
let from = myItem.lists.pause.attached[0].from
如有任何帮助,将不胜感激。
问题内容: 我正在使用一个API,该API返回如下所示的JSON 在Swift中,我使用两个函数来获取并解析JSON 然后我用 可以很好地解析JSON。当我打印出 我得到了数组的所有内容。但是,我无法访问每个单独的索引。我很肯定这是一个数组,因为我之间 返回正确的长度。但是,如果我尝试通过使用访问单个索引 XCode关闭语法高亮显示并给我以下信息: 并且代码将无法编译。 这是XCode 6的错误,
问题内容: 我正在尝试获取JSON响应并将结果存储在变量中。在以前的Swift版本中,我已经使用过此代码的版本,直到Xcode 8的GM版本发布为止。我在StackOverflow上看到了一些类似的文章:Swift 2解析JSON- 无法 在Swift 3中下标’AnyObject’类型的值和JSON解析。 但是,似乎此处传达的想法不适用于这种情况。 如何在Swift 3中正确解析JSON响应?在
问题内容: 应用启动时,我需要将数据预加载到tableView中。所以我通过解析.csv文件来使用核心数据。为此,我正在关注本教程。这是我的parseCSV函数 这是我的示例.csv文件 但我在这条线上出现错误 致命错误:数组索引超出范围 我究竟做错了什么 ?请帮我。 问题答案: 您正在尝试解析文件路径而不是文件内容。 如果您更换 与: 那么代码将适用于您的示例文件。
问题内容: 我是解析新手,找不到任何过时且未提出更多问题的教程。我正在尝试解析一个简单的xml文件url。xml非常简单: 并且只想将其保存为NSDictionary(标签作为键,数据作为值)。到目前为止,我所能成功完成的工作是在控制台中使用以下命令打印xml字符串: 我浏览过所有发现的在线教程,这些教程要么过时,要么过于复杂。任何帮助表示赞赏。 问题答案: 过程很简单: 创建对象,并向其传递数据
问题内容: 有没有人能够找到一种在Swift 3中解析JSON文件的方法?我已经能够获得返回的数据,但是在将数据分解为特定字段方面我没有成功。我会发布示例代码,但是我经历了很多不同的方法,但是都没有成功。我想解析的基本格式是这样的。提前致谢。 问题答案: 你试过了吗? Swift有时会产生一些非常奇怪的语法。 JSON对象层次结构中的所有内容最终都被包装为可选(即)。下标返回一个非可选的。对于此J