2017-01-31 31 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。谢谢! –

相关问题