如何在swift中解析JSON 3
问题描述:
我想解析从服务器响应中读取的JSON。我能够获得第一关,但之后我可以进入下一关。由于我对IOS完全陌生,所以我尽可能多地探索和尝试,但一切都是静静的。我怀疑在基础层面上缺少什么。如何在swift中解析JSON 3
let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
打印(JSON)
{
"ab_report" = "[{\"label\":\"ART\",\"value\":187},{\"label\":\"SINDED\",\"value\":24},{\"label\":\"RES\",\"value\":1},{\"label\":\"REAL\",\"value\":1}]";
distslist = (
{
"_id" = {
"$id" = 5732d884dbe782a63c760e3b;
};
"dt_code" = ADB;
"dt_name" = Adilaasbad;
"st_name" = 572d95c0dsdfbe7823348c981b3;
},
{
"_id" = {
"$id" = 572d95d4dbsadfe7826b48c981b3;
};
"dt_code" = HEEWYD;
"dt_name" = aassas;
"st_name" = 572d95c0efghbe7823348dc981b3;
}
)
"last_ssdate" = "Lase on : 2s0";
message = "";
"ressdfort" = "[{\"label\":\"Ded\",\"value\":71},{\"label\":\"Weed\",\"value\":0},{\"label\":\"Scrnitiated\",\"value\":0}]";
"scrort" = "[{\"label\":\"Physicals\",\"value\":8551},{\"label\":\"General\",\"value\":15752},{\"label\":\"Ees\",\"value\":2756}]";
}
打印(JSON [“ressdfort”]!)
[{"label":"Ded","value":71},{"label":"Weed","value":0},{"label":"Stiated","value":0}]
在此之后我想取的值一个一个具有来自每个对象的“标签”和“值”。
提前致谢。
答
现在试试这个为获得 “标签” values.Pass你jsonObj这个function.Hope其工作对你:)
func parseJson(_ JsonDict: AnyObject)
{
if let dict = JsonDict["ressdfort"] as? [AnyObject]{
for dict1 in dict{
if let textDist = (dict1 as? [String : AnyObject])?["label"]{
print("YOUR LABEL TEXT IS \(String(describing: textDist))")
}
}
}
}
答
let bundle = json["ressdfort"] as! Array
for eachObject in bundle
{
let label = (eachObject as! NSDictionary).valueForKey("label")! as! String
let value =(eachObject as! NSDictionary).valueForKey("value")! as! String
print(label)
print(value)
}
+0
我很抱歉,它不工作,我得到'成员'下标'的歧义引用 – santoshi
答
您可以使用Alamofire并解析JSON响应如下:
Alamofire.request(.POST, YOUR_URL, parameters: DIC_PARAMETERS, encoding: .URLEncodedInURL)
.responseJSON { response in
guard response.result.error == nil else {
print(response.result.error!)
return
}
if let value = response.result.value {
print("Your Response is: " + value.description)
if((response.result.value) != nil) {
let swiftyJsonVar = response.result.value!
do {
if let dicObj = swiftyJsonVar as? NSDictionary {
print("Response is dictionary")
print(dicObj)
let arrObj = dicObj["ab_report"] as NSArray
let arrObj2 = dicObj["distslist"] as NSArray
// Then iterate your arrObj and do as per your requirment.
} else if let arrObj = swiftyJsonVar as? NSArray {
print("Response is an array")
print(arrObj)
} else {
print("response is not valid JSON data")
}
}
}
}
}
}
json [“ressdfort”]!返回一个'Array'类型为'Dictionary''[Dictionary]'的元素'。Google如何处理这些类型如果在Swift中做什么,您可能需要阅读: https://developer.apple.com/library/content/documentation /Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309 – shallowThought
@shallowThought谢谢你的建议,我通过该链接并获得了一些基本的想法。当我打印'print(type(of:json))'它是'__NSDictionaryI','type(of:json [“ressdfort”]!)''__NSCFString'和'type(of:json [“ressdfort” ]!)'它是'可选的
santoshi
两个想法:首选'Dictionary'([String:Any]或类似的东西)到Swift中的'NSDictionary'。此外,您JSON将JSON字符串嵌入为JSON,因此对于'ressdfort','script'和'ab_report'值,您必须再次调用'JSONSerialization'。 – Larme