JSON 输出不包含键:"value"

The JSON output does not contain a key: "value"

我的 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: {}
            },
        ...

假设你想访问结果键,那么试试这样:-

if let bpArray = jsonValue["results"] as? [String: AnyObject]{
//yourcode
}

嗯,您的 json 结构没有任何名为值的键,这就是它给出错误的原因。
为了获得结果数组,您首先需要获得它们嵌套的对象,例如 'g' 在您的情况下:

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

请使用 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)")

            }

记住,我们最好不要像 SWIFTSWIFT 中那样使用 NSArrayNSDictionary,它会自行提供 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: [=11=])})//for assigning data into model
                }
       }

正如大多数人所说,我错了"value"。 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 {