2017-10-20 177 views
1

我試圖從json中獲取某個值。在這種情況下,我試圖獲得'isethanawake'的值,在這種情況下應該是1:如何從swift中獲取json數據中的特定值

可選([{「isethanawake」:1,「name」:「Ethan」},{「ismadisonawake」 :0,「name」:「Madison」},{「ismomawake」:0,「name」:「Mom」},{「isdadawake」:0,「name」:「爸爸」}]

代碼我已經和它不變量設置爲1

var isethanawake = 0 
var ismadisonawake = 0 
var ismomawake = 0 
var isdadawake = 0 

request2.httpBody = postString2.data(using: String.Encoding.utf8) 

let task2 = URLSession.shared.dataTask(with: request2 as URLRequest){ 
    data, response, error in 

    if error != nil{ 
     print("error = \(error)") 
     return 
    } 

    print("response = \(response)") 

    let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
    print("responseString = \(responseString)") 

    do{ 
     let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 

     if let parseJSON1 = json { 
      isethanawake = parseJSON1["isethanawake"] as! Int 

     } 
     if let parseJSON2 = json{ 
      ismadisonawake = parseJSON2["ismadisonawake"] as! Int 
     } 


     if let parseJSON3 = json{ 
      ismomawake = parseJSON3["ismomawake"] as! Int 
     } 

     if let parseJSON4 = json{ 
      isdadawake = parseJSON4["isdadawake"] as! Int 
     } 

     print("hello" + String(isethanawake)) 
    }catch{ 
     print(error) 
    } 

正是從這個PHP腳本獲取數據:

$jsonarray = array(); 

if(mysqli_num_rows($ethanresult)){ 
    $returnValue1 = array("isethanawake"=> 1, "name"=> "Ethan"); 
    array_push($jsonarray, $returnValue1); 
}else{ 
    $returnValue1 = array("isethanawake"=> 0, "name"=> "Ethan"); 
    array_push($jsonarray, $returnValue1); 
} 
if(mysqli_num_rows($madisonresult)){ 
    $returnValue2 = array("ismadisonawake"=> 1, "name"=> "Madison"); 
    array_push($jsonarray, $returnValue2); 
}else{ 
    $returnValue2 = array("ismadisonawake"=> 0, "name"=> "Madison"); 
    array_push($jsonarray, $returnValue2); 
} 
if(mysqli_num_rows($momresult)){ 
    $returnValue3 = array("ismomawake"=> 1, "name"=> "Mom"); 
    array_push($jsonarray, $returnValue3); 
}else{ 
    $returnValue3 = array("ismomawake"=> 0, "name"=> "Mom"); 
    array_push($jsonarray, $returnValue3); 
} 
if(mysqli_num_rows($dadresult)){ 
    $returnValue4 = array("isdadawake"=> 1, "name"=> "Dad"); 
    array_push($jsonarray, $returnValue4); 
}else{ 
    $returnValue4 = array("isdadawake"=> 0, "name"=> "Dad"); 
    array_push($jsonarray, $returnValue4); 

} 
echo json_encode($jsonarray); 

} 

感謝

+0

是元組類型'(key:String,value:Any)'的值沒有成員'下標' –

+0

如果讓ethanisawake = obj [「isethanwake」]我得到這個錯誤 –

回答

0

至於你說你對你的JSON結構是:

可選([{ 「isethanawake」:1, 「名」: 「阮經天」},{ 「ismadisonawake」:0, 「名」 : 「麥迪遜」},{ 「ismomawake」:0, 「姓名」: 「媽媽」},{ 「isdadawake」:0, 「姓名」: 「爸爸」}]

在夫特JSON將是鍵入[[String:Any]] ?.這意味着你有一個Dictionarys數組。該錯誤告訴您不能使用String爲數組下標。 這意味着你需要遍歷你的兒子陣列做你想要的代碼:

do{ 
     let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 

if let json as? [[String: Any]]{ 
for arrayJSONObj in json { 


      isethanawake = arrayJSONObj["isethanawake"] as? Int ?? 0 

      ismadisonawake = arrayJSONObj["ismadisonawake"] as? Int ?? 0 

      ismomawake = arrayJSONObj["ismomawake"] as? Int ?? 0 

      isdadawake = arrayJSONObj["isdadawake"] as? Int ?? 0 

} 
} 
     print("hello" + String(isethanawake)) 
    }catch{ 
     print(error) 
    } 

我還建議使用默認值,你的價值觀(這兩個?),而不是力量展開它們,以防止你的應用程序崩潰。