1

我目前正在向 Microsoft 的 Emotion API 发送请求,请求成功但我收到无效的JSON,(JSON 无法使用NSJSONSerialization.JSONObjectWithData as! [String: String]or withSwiftyJSON但可以转换为NSArray(我可以使用NSArray)。(所有其他选项返回nil

要求

    let params = [ "url": "http://reneemullingslewis.com/wp-content/uploads/2014/08/woman-smiling.png" ]
    let body = try? NSJSONSerialization.dataWithJSONObject(params, options: [])
    let url = NSURL(string: "https://api.projectoxford.ai/emotion/v1.0/recognize")!
    let request = NSMutableURLRequest(URL: url)
    request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.setValue("XXXXXXXXXXXXXXXXXXXXXX", forHTTPHeaderField: "Ocp-Apim-Subscription-Key")
    request.HTTPBody = body
    request.HTTPMethod = "POST"

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in
        if error != nil{
            print("Error -> \(error)")
            return
        }
        do {
            let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSArray
            let dResult = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:String]
            let json = JSON(data!)
            print(result)
            print(result?[0]["scores"]??["anger"]) //Is works
            print(dResult) //Returns nil
            print(json) //Returns 'unknown'

        } catch {
            print(error)
        }
    }

    task.resume()

预期的 JSON(来自 API 测试控制台的结果)

[
  {
    "faceRectangle": {
      "height": 208,
      "left": 172,
      "top": 128,
      "width": 208
    },
    "scores": {
      "anger": 2.46091458E-05,
      "contempt": 0.297730684,
      "disgust": 9.475541E-05,
      "fear": 1.13360545E-06,
      "happiness": 0.564267159,
      "neutral": 0.131727561,
      "sadness": 1.14351078E-05,
      "surprise": 0.0061426633
    }
  }
]

NSArray 结果

(
        {
        faceRectangle =         {
            height = 147;
            left = 130;
            top = 177;
            width = 147;
        };
        scores =         {
            anger = "0.000382305647";
            contempt = "0.304994762";
            disgust = "0.006239909";
            fear = "0.000005770166";
            happiness = "0.6252902";
            neutral = "0.06043929";
            sadness = "0.002567473";
            surprise = "0.00008030776";
        };
    },
        {
        faceRectangle =         {
            height = 48;
            left = 732;
            top = 35;
            width = 48;
        };
        scores =         {
            anger = "0.00000843479847";
            contempt = "0.00121067557";
            disgust = "0.00008578587";
            fear = "0.0000008104981";
            happiness = "0.9274825";
            neutral = "0.07090671";
            sadness = "0.000124009457";
            surprise = "0.000181075331";
        };
    }
)
4

1 回答 1

3

[String:String](aka Dictionary<String,String>) 是字典,而不是数组,JSON 的常见 Swift 数组类型是[[String:AnyObject]](aka Array<Dictionary<String,AnyObject>>)

于 2016-04-08T17:10:19.077 回答