如何在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}] 

在此之后我想取的值一个一个具有来自每个对象的“标签”和“值”。

提前致谢。

+0

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

+0

@shallowThought谢谢你的建议,我通过该链接并获得了一些基本的想法。当我打印'print(type(of:json))'它是'__NSDictionaryI','type(of:json [“ressdfort”]!)''__NSCFString'和'type(of:json [“ressdfort” ]!)'它是'可选的 santoshi

+0

两个想法:首选'Dictionary'([String:Any]或类似的东西)到Swift中的'NSDictionary'。此外,您JSON将JSON字符串嵌入为JSON,因此对于'ressdfort','script'和'ab_report'值,您必须再次调用'JSONSerialization'。 – Larme

现在试试这个为获得 “标签” 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") 
          } 
         } 
        } 
       } 
     } 
    }