使用 Alamofire 在 swift 3 中解析 Json

Posted

技术标签:

【中文标题】使用 Alamofire 在 swift 3 中解析 Json【英文标题】:Json Parsing in swift 3 using Alamofire 【发布时间】:2017-01-04 11:34:28 【问题描述】:

我在 swift 3 工作。我是 ios 新手。我正在尝试解析 json 数据,例如

My jsonVlaue is : 
    data =     (
                
            Password = "@1234";
            UserName = "<null>";
            "___class" = OrderTable;
            "__meta" = "\"relationRemovalIds\":,\"selectedProperties\":[\"UserName\",\"created\",\"name\",\"___class\",\"ownerId\",\"updated\",\"objectId\",\"Password\"],\"relatedObjects\":";
            created = 1483525854000;
            name = TestMan;
            objectId = "4316DEBA-78C1-C7BD-FFBC-3CB77D747F00";
            ownerId = "<null>";
            updated = "<null>";
        ,
                
            Password = 123;
            UserName = "<null>";
            "___class" = OrderTable;
            "__meta" = "\"relationRemovalIds\":,\"selectedProperties\":[\"UserName\",\"created\",\"name\",\"___class\",\"ownerId\",\"updated\",\"objectId\",\"Password\"],\"relatedObjects\":";
            created = 1483516868000;
            name = tommy;
            objectId = "29155114-C00B-5E1C-FF6F-7C828C635200";
            ownerId = "<null>";
            updated = "<null>";
        .......

我只想要 keyvalue:"name" 和我想添加到数组中的值。

我尝试这样做,但我的应用程序崩溃了。我的代码我喜欢如下

 func getLoginDetails()
    
       //https://api.backendless.com/<version>/data/<table-name>/properties

        Alamofire.request( HeadersClass.api.domainName + "OrderTable", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: HeadersClass.allHeaders.headers).responseJSON  response in
            //debugPrint(response)
            if let jsonDict = response.result.value as? NSDictionary 
                print("My jsonVlaue is : \(jsonDict)")

                 let arrayPracticeData: NSArray = jsonDict.value(forKey: "name") as! NSArray

                    print(arrayPracticeData)


            

        

谁能告诉我如何解决这个问题。提前致谢。

【问题讨论】:

【参考方案1】:

首先在 Swift 中使用 Swift 的原生 Array 和 Dictionary 而不是 NSDictionaryNSArray

现在要获取名称,您需要从 JSON 响应 Dictionary 中获取 Data 数组。所以试试这样的。

Alamofire.request( HeadersClass.api.domainName + "OrderTable", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: HeadersClass.allHeaders.headers).responseJSON  response in

     //debugPrint(response)
     if let jsonDict = response.result.value as? [String:Any], 
        let dataArray = jsonDict["data"] as? [[String:Any]] 
           let nameArray = dataArray.flatMap  $0["name"] as? String 
           print(nameArray)
     

输出

["TestMan", "tommy", ...]

【讨论】:

@hrithib 欢迎朋友 :)

以上是关于使用 Alamofire 在 swift 3 中解析 Json的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 中的 Alamofire?

Swift 3 - 不能使用数组提出的 Alamofire 请求

带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire

使用 Alamofire 在 swift 3 中解析 Json

Alamofire 模块未使用 Swift 3.0.1 编译

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?