2016-11-20 104 views
-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

回答

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))") 

       } 
      } 

     } 


    } 
-1
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

0

您可以使用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") 
          } 
         } 
        } 
       } 
     } 
    }