2017-01-31 70 views
0

我試着四處搜索,找不到任何解決問題的東西。 這裏是這樣的JSON答覆,我想改變爲[的NSDictionary]:將字符串數據從json更改爲NSArray swift 3

let reply = "[{"qty":"3","price":"75000"},{"qty":"4","price":"75000"},  
{"qty":"1","price":"60000"},{"qty":"2","price":"60000"},{"qty":"6","price":"80000"}]" 

let array = [{"qty":"3","price":"75000"},{"qty":"4","price":"75000"}, 
{"qty":"1","price":"60000"},{"qty":"2","price":"60000"},{"qty":"6","price":"80000"}] 

可有人請幫助我的例子。謝謝!

+0

使用這個庫:https://github.com/SwiftyJSON/SwiftyJSON –

+0

不要 - **永遠不要做** - 在Swift中使用'NSArray/NSDictionary'並結合'JSON'。 – vadian

回答

1

從你的陳述:

i want to change to [NSDictionary] 

我認爲它是:

Array<Dictionary<String, Any>> // using Swift v3 

雖然還有一個更方便的解決方案是使用SwiftyJSON庫,但非第三方解決方案可能是:

let reply = "[{\"qty\":\"3\",\"price\":\"75000\"},{\"qty\":\"4\",\"price\":\"75000\"},{\"qty\":\"1\",\"price\":\"60000\"},{\"qty\":\"2\",\"price\":\"60000\"},{\"qty\":\"6\",\"price\":\"80000\"}]" 

do { 
     let data = try JSONSerialization.jsonObject(with: reply.data(using: .utf8)!, options: .allowFragments) as? Array<Dictionary<String, Any>> 

     let firstElement: Dictionary<String, Any> = data!.first! 
     print("First dictionary element: \(firstElement)") 
     print("Quantity from first dictionary element: \(firstElement["qty"] as! String)") 
} 
catch{ 
     print ("Handle error") 
} 

輸出:

First dictionary element: ["qty": 3, "price": 75000] 
Quantity from first dictionary element: 3 

注:

我沒有處理零檢查,我也轉換字符串返回到數據來獲取JSON對象,如果你已經有數據不需要調用reply.data(using: .utf8)!而不是傳遞你的數據。

按照上述評論:

你也可以畫上等號:

Array<Dictionary<String, Any>> = [[String: Any]] 
Dictionary<String, Any>  = [String: Any] 
+0

謝謝NeverHopeless它的工作! –

0

回覆已經是Dictionary的數組。你究竟在問什麼?如果您需要將json回覆的字符串表示轉換爲可管理的結構,那麼正如@Imad所建議的,您應該使用可用的許多JSON庫之一,並且SwiftyJSON是最好的之一。

一旦你得到你的答覆,所有你需要的是這樣的

let json = JSON(data: dataFromNetworking) 

另外,如果你是包括代碼,請確保它是真正的代碼 - 你已經表明會產生錯誤的東西,但這種意願不。

let reply = [["qty":"3","price":"75000"], 
      ["qty":"4","price":"75000"], 
      ["qty":"1","price":"60000"], 
      ["qty":"2","price":"60000"], 
      ["qty":"6","price":"80000"]] 
0
var json_Parameters = NSArray() 

let reply = "[{\"qty\":\"3\",\"price\":\"75000\"},{\"qty\":\"4\",\"price\":\"75000\"},{\"qty\":\"1\",\"price\":\"60000\"},{\"qty\":\"2\",\"price\":\"60000\"},{\"qty\":\"6\",\"price\":\"80000\"}]" 

轉換JSON字符串以JSON數據,並使用下面的代碼輸入種姓爲Array()

if let data = reply.data(using: String.Encoding.utf8) { 
do { 
    let datwa = try JSONSerialization.jsonObject(with: data, options: []) as! NSArray 
    json_Parameters = datwa 
} 

}

+2

在Swift中處理JSON時,'NSArray'看起來很容易,但非常糟糕。您丟棄編譯器創建高效代碼所必需的類型信息。無論如何,我們強烈建議您不要在Swift中使用Foundation集合類型。 – vadian

+0

@Vadian我只做了什麼「SawSoeMoeNyunt」問。 –

+1

@BraneDullet有時只做OP想要的不是最好的答案。 :) – Moritz

1

試試這個:

let jsonText = "[{\"qty\":\"3\",\"price\":\"75000\"},{\"qty\":\"4\",\"price\":\"75000\"},{\"qty\":\"1\",\"price\":\"60000\"},{\"qty\":\"2\",\"price\":\"60000\"},{\"qty\":\"6\",\"price\":\"80000\"}]" 
     var myData:NSArray? 

     if let data = jsonText.data(using: String.Encoding.utf8) { 

      do { 
       myData = try JSONSerialization.jsonObject(with: data, options: []) as? NSArray 

       if let resultdata = myData 
       { 
        print(resultdata) 
       } 
      } catch let error as NSError { 
       print(error) 
      } 
     } 
+0

對不起。它是通過修改完成的。 – Vandana

+0

也工作Vandana。謝謝! –

相關問題