我想解析从服务器收到的JSON数据。
这是我的代码:
Alamofire.request(url).responseJSON { response in
let resCode = String(data: response.data!, encoding:String.Encoding.utf8) as String!
print("res:\(String(describing: resCode))")
//print("data:\(response.data!)")
let data = resCode?.data(using: String.Encoding.utf8)
}
print res:
RES:可选( “{\” 代码\ “:200,\” 数据\ “:{\” HDL \ “:[\” 81 \”,\ “87 \”,\ “65 \”,\ “72 \”,\ “81 \”,\ “51.23288 \”],\ “LDL \”:[\ “128 \”,\ “107 \”,\ “150 \”,\ “116 \”,\ “168 \” \ “114.03974 \”],\ “三\”:[\ “189 \”,\ “187 \”,\ “210 \”,\ “192 \”,\ “200 \”,\ “171.26027 \”],\ “栏\”:[\ “218 \”,\ “203 \”,\ “225 \”,\ “213 \”,\ “280 \” \ “194.59934 \”], \ “BMI \”:\ “21.8 \”,\ “21.8 \”,\ “21.5 \”,\ “21.8 \”,\ “22.1 \”,\ “25.28467 \”] \ “年度\”: [\ “2011-04-20 \”,\ “2012-04-03 \” \ “2013年6月13日\” \ “2014年5月26日\” \ “2016年6月8日\” ,\ “预测\”]}}“)
我想将每个数据存储在HDL,LDL,TRI,COL,BMI和YEAR数组中。
答案 0 :(得分:1)
您需要使用JSONSerialization方法jsonObject(with:data)将您的json数据转换为Dictionary:
let json = "{\"code\":200,\"data\":{\"hdl\":[\"81\",\"87\",\"65\",\"72\",\"81\",\"51.23288\"],\"ldl\":[\"128\",\"107\",\"150\",\"116\",\"168\",\"114.03974\"],\"tri\":[\"189\",\"187\",\"210\",\"192\",\"200\",\"171.26027\"],\"col\":[\"218\",\"203\",\"225\",\"213\",\"280\",\"194.59934\"],\"bmi\":[\"21.8\",\"21.8\",\"21.5\",\"21.8\",\"22.1\",\"25.28467\"],\"year\":[\"2011-04-20\",\"2012-04-03\",\"2013-06-13\",\"2014-05-26\",\"2016-06-08\",\"predict\"]}}"
let data = Data(json.utf8)
if let dict = (try? JSONSerialization.jsonObject(with: data)) as? [String:Any],
let subdict = dict["data"] as? [String:[String]] {
let hdl = subdict["hdl"] // ["81", "87", "65", "72", "81", "51.23288"]
let ldl = subdict["ldl"] // ["128", "107", "150", "116", "168", "114.03974"]
let tri = subdict["tri"] // ["189", "187", "210", "192", "200", "171.26027"]
let col = subdict["col"] // ["218", "203", "225", "213", "280", "194.59934"]
let bmi = subdict["bmi"] // ["21.8", "21.8", "21.5", "21.8", "22.1", "25.28467"]
let year = subdict["year"] // ["2011-04-20", "2012-04-03", "2013-06-13", "2014-05-26", "2016-06-08", "predict"]
}