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

如何在Swift中单独解析JSON数据字符串,json,swift,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}] 我想分别得到每个字符

我是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}]
我想分别得到每个字符串

例如:符号、日期等

任何帮助都将不胜感激。谢谢

作为参考,我尝试了以下解决方案,但出现错误:

在Swift 4中,可解码的
协议非常简单:

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)
}
甚至将日期字符串解码为
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)
}

这是一个将
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()

请学习阅读JSON。这很简单。只有两种集合类型(数组、字典)和四种值类型(字符串、数字、bool和null)。另请参见我的回答:

你好,瓦迪安,谢谢你的帮助!抱歉,我想我还没有把问题说清楚,但我实际上是从互联网上获取子文件…使用
URLSession
获取数据。这里有数百个例子,例如在链接问题中。在这种情况下,省略行
let data=data(jsonString.utf8)
并使用从
dataTask
返回的
data
,Hi-Vadian,我尝试使用您提供的链接上的解决方案,但得到了ff。错误:无法将类型为“\uu NSArrayI”的值强制转换为“NSDictionary”。请不要使用
JSONSerialization
。将此答案中的
数据
传递给
JSONDecoder
。关于您刚才的回答,我如何使用从dataTask返回的数据?对不起,我是新手。我得到了部分
let urlString=https://api.forecast.io/forecast/apiKey/37.5673776,122.048951让url=url(string:urlString)URLSession.shared.dataTask(with:url!){(数据、响应、错误)在if error!=nil{print(error)}else{
在我的代码中,但是,如何将dataTask的值放入
do中{let data=
?您尝试的代码在哪里?我投票结束这个问题,因为没有显示出解决问题的努力。为什么?瓦迪安回答了我的问题。请阅读。这不是我所说的原因。您只是说“因为没有显示出解决问题的努力”。我的问题由瓦迪安解决。