2017-09-20 35 views
0

這是我的PHP:Swift - 如何讀取用json_encode生成的二維數組?

$query->bind_param("s", $consulta); 
$result = $query->execute(); 
$query->bind_result($row1, $row2); 

if($result) 
{ 
    $json_response = array(); 
    while ($query->fetch()) 
    { 
     $json_response[] = array("NUMERO" => $row1, "IMAGEN" => $row2); 
    } 
} 
echo json_encode($json_response); 

這是我的安排:

[ 
{"NUMERO":99512233,」IMAGEN」:」\/imagen.jpg」}, 
{「NUMERO":99887766,」IMAGEN」:」\/imagen.jpg」}, 
{「NUMERO」:99557744,」IMAGEN」:」\/imagen.jpg」} 
] 

所以我想讀的安排:

let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 
if let parse_json = json 
{ 
    print(parse_json[「NUMERO」][0]) //99512233 
} 

我怎麼能讀呢?

+0

更清楚。讀什麼?你的代碼不工作?它應該做什麼? – Rob

回答

0

我找到了解決方案通過執行以下操作:

$json_response = array(); 
if($result) 
{ 
    while ($query->fetch()) 
    { 
     $json_response[] = array("NUMERO"=>(string)$row1,"IMAGEN"=>(string)$row2); 
    } 
} 
echo json_encode($json_response); 

在Xcode:

_ = URLSession.shared.dataTask(with: url_request) 
    {(data, response, error) in 
         if(error != nil) 
         { 
          print("Error != nil") 
         } 
         else 
         { 
          if let status_code = response as? HTTPURLResponse 
          { 
           if status_code.statusCode >= 200 && status_code.statusCode < 300 
           { 
            var json_result = NSArray() 
            do 
            { 
             json_result = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSArray 
            } 
            catch 
            { 
             print("Error al convertir el arreglo") 
             print(error.localizedDescription) 
             return 
            } 

            var json_element = NSDictionary() 
            for x in 0 ..< json_result.count 
            { 
             json_element = json_result[x] as! NSDictionary 
             if let numero = json_element["NUMERO"] as? String, 
              let imagen = json_element["IMAGEN"] as? String 
             { 
              print(numero + " " + imagen) 
             } 
             else 
             { 
              //No se pudo convertir 
              print("Nada que mostrar") 
             } 
            } 
           } 
           else 
           { 
            //Error de servidor 
            print("No se pudo establecer una conexion") 
           } 
          } 
          else 
          { 
           print("No se pudo convertir el URLResponse") 
          } 
         } 
}.resume() 
0

的JSON告訴你:

[ 
{"NUMERO":99512233,」IMAGEN」:」\/imagen.jpg」}, 
{「NUMERO":99887766,」IMAGEN」:」\/imagen.jpg」}, 
{「NUMERO」:99557744,」IMAGEN」:」\/imagen.jpg」} 
] 

...在我看來就像一個包含多個字典的數組。

試試你的JSON輸出鑄造所需的類型:

let json = try JSONSerialization.jsonObject(with: data!, 
    options: .mutableContainers) 
guard let parse_json = json as? [[String:Any]] else { 
    print("Unable to cast JSON to expected type") 
    return 
} 
print(parse_json[0][「NUMERO」]) //99512233 
+0

感謝您的回答,該方法不會標記錯誤,但會返回一個空數組 - >「索引超出範圍」 – Angel

+0

好的,您需要在調試器中遍歷代碼並檢查您回來的數據。用'e parse_json'命令記錄'parse_json'的內容並查看你得到的結果。 –

0

首先,你需要把解析的JSON成的NSDictionary,那麼你就可以訪問鍵和NSDictionary中的值,就像這樣: json.value(forKey: "NUMERO")

+0

看起來他的數據是一個字典數組,而不是字典。 –