我是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对象
在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)
这是一个例子,把JSONDecoder和URLSession在一起:
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.这很简单.只有两种集合类型(数组,字典)和四种值类型(字符串,数字,布尔值和空值).另见我在这个问题中的答案: