JSON输出不包含键:“value”

时间:2017-07-26 04:23:34

标签: json swift parsing nsdictionary

我的Swift代码有JSON解析问题。我收到的错误表明我的JSON输出不包含密钥value

我的代码:

 Alamofire.request(url, method: .get, headers: headers).responseJSON { (response) -> Void in

     let jsonValue = response.result.value as! NSDictionary
     if let bpArray = jsonValue["value"] as? [NSDictionary]{
         for  results in bpArray {...}

问题: 此转换不起作用:if let bpArray = jsonValue["value"] as? [NSDictionary]

我的JSON结构:

{
    d: {
        results: [
            {
                __metadata: {},
                Key: "AFBWhULFHtKU4j4FhWCmKg==",
                ParentKey: "AAAAAAAAAAAAAAAAAAAAAA==",
                RootKey: "AFBWhULFHtKU4j4FhWCmKg==",
                Partner: "MM-CARR-01",
                Type: "2",
                Description: "MM Demo Carrier Created for Single Stop / MA",
                FrieghtOrder: {}
            },
        ...

5 个答案:

答案 0 :(得分:1)

假设您要访问结果键,请尝试这样: -

shares (Just (x, y)) = Just x

答案 1 :(得分:1)

那么你的json结构还没有任何一个名为value的键,这就是它发出错误的原因。 为了获得结果数组,首先需要获取它们嵌套的对象,例如'g'

if let data = jsonValue["d"] as? [NSDictionary]{
     if let resultsArray = data["results"] as? NSArray {
         //your code
     }
}

答案 2 :(得分:0)

请使用Swifty Json Pod并尝试此代码

pod 'SwiftyJSON'

在您收到回复的文件中

import  SwiftyJSON

然后使用此代码后

         switch response.result {
            case .success(let JSON2):
            print("Success with JSON: \(JSON2)")
              //  print("Request failed with error: \(response.response?.statusCode)")

                if let response = JSON2 as? NSMutableDictionary
                {

                }
                else if let response = JSON2 as? NSDictionary
                {
 if let data = response?.object(forKey: "d") as? NSDictionary
 {
    if let resultsArray = data?.object(forKey: "results") as? NSArray 
        {

         }
 }
                }
                else if JSON2 is NSArray
                {

                    let swjson = JSON(response.result.value!)
                    print(swjson)
                    // callback(swjson,nil)
                    var myMutableDictionary = [AnyHashable: Any]()
                    myMutableDictionary["myArray"] = swjson

                    callback(myMutableDictionary as NSDictionary?,nil)
                    print("accc")
                }
                else if ((JSON2 as? String) != nil)
                {

                    let userDic : [String : String] = ["quatid":JSON2 as! String]
                    print(userDic)


            }

                break

            case .failure(let error):
                print("Request failed with error: \(error)")

            }

答案 3 :(得分:0)

请记住,我们最好不要使用NSArray& NSDictionary类似SWIFT SWIFT中的内容,它为各种数据类型自行提供letvar个关键字。 首先,您可以创建可以保存数据的模型。

<强> MyModel.swift

class MyModel: NSObject {
    var ParentKey : Int?

    init(jsonObject:[String:Any]) {
        ParentKey = jsonObject["ParentKey"] as? String ?? ""
  }
}

<强> Viewcontroller.Swift

    var myModel : [MyModel] = []
    if let responseData = response["d"] as? [String:Any]{
              if let dataObject = responseData["results"] as? [[String:Any]]{
                 self.myModel = dataObject.map({return MyModel(jsonObject: $0)})//for assigning data into model
                }
       }

答案 4 :(得分:0)

正如大多数人所说,我对“价值”的看法不对。 Hussain使用[String:AnyObject]帮助的答案。

我不确定下面是否能够实现,但它确实是神奇的。应用按预期加载。代码专家如下:

<强>解决方案:

        if let bpData = jsonValue["d"] as? [String: AnyObject]{

            for results  in bpData {

                let arrayInterim = results.value as? NSArray

                for i in 0 ..< arrayInterim!.count {