如何在Swift中单独解析JSON数据字符串

mjo*_*oe7 -4 json swift

我是JSON的新手.我做了一些阅读但我仍然感到困惑,我得到了错误.

你如何解析以下数据?

[{"symbol":"ALI","date":"1/22/2018","open":44.9000,"high":45.5000,"low":44.9000,"close":45.2000,"bid":45.1500,"ask":45.2000,"volume":6698800,"value":303245610.0000,"netForeign":-42279365.0000}]
Run Code Online (Sandbox Code Playgroud)

我想分别得到每个字符串.

例如:符号,日期等

任何帮助将不胜感激.谢谢!

作为参考,我尝试了以下解决方案但得到了一个错误: 如何在swift 3中解析Json对象

vad*_*ian 5

在Swift 4中,Decodable协议非常简单:

let jsonString = """
[{"symbol":"ALI","date":"1/22/2018","open":44.9000,"high":45.5000,"low":44.9000,"close":45.2000,"bid":45.1500,"ask":45.2000,"volume":6698800,"value":303245610.0000,"netForeign":-42279365.0000}]
"""

struct Item : Decodable {
    let symbol, date : String
    let open, high, low, close, bid, ask, value, netForeign : Double
    let volume : Int
}

do {
    let data = Data(jsonString.utf8)
    let result = try JSONDecoder().decode([Item].self, from: data)
    print(result)
} catch {
    print("error: ", error)
}
Run Code Online (Sandbox Code Playgroud)

甚至将日期字符串解码为 Date

struct Item : Decodable {
    let symbol : String
    let date : Date
    let open, high, low, close, bid, ask, value, netForeign : Double
    let volume : Int
}

do {
    let data = Data(jsonString.utf8)
    let formatter = DateFormatter()
    formatter.dateFormat = "MM/dd/yyyy"
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .formatted(formatter)
    let result = try decoder.decode([Item].self, from: data)
    print(result)
} catch {
    print("error: ", error)
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子,把JSONDecoderURLSession在一起:

let url = URL(string: "https://api.whatever...")!
URLSession.shared.dataTask(with:url) { (data, _, error) in
  if error != nil {
     print(error!)
  } else {
     do {
        let result = try JSONDecoder().decode([Item].self, from: data!)
        print(result)
    } catch {
        print("error: ", error)
    }
  }

}.resume()
Run Code Online (Sandbox Code Playgroud)

请学习阅读 JSON.这很简单.只有两种集合类型(数组,字典)和四种值类型(字符串,数字,布尔值和空值).另见我在这个问题中的答案: