我目前正在向 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";
};
}
)