我正在尝试将URLSession的数据转换为NSDictionary,但是将数据转换为字典时却失败。
以下情况:
public onDrawLayer(info) {
this.info = info;
var ctx = info.canvas.getContext('2d');
ctx.clearRect(0, 0, info.canvas.width, info.canvas.height);
const fillStyleLayer = "rgba(255,0,0,1)"; // red: layer
const fillStyleContainer = "rgba(0,0,255,1)"; // blue: container
var layerPoint = info.layer._map.latLngToLayerPoint([0,0]);
var containerPoint = info.layer._map.latLngToContainerPoint([0,0]);
// this.dot = (this.dragging)
// ? info.layer._map.latLngToLayerPoint([0,0]);
// : info.layer._map.latLngToContainerPoint([0,0]);
ctx.fillStyle = fillStyleLayer;
ctx.beginPath();
ctx.arc(layerPoint.x, layerPoint.y, 3, 0, Math.PI * 2);
ctx.fill();
ctx.closePath();
ctx.fillStyle = fillStyleContainer;
ctx.beginPath();
ctx.arc(containerPoint.x, containerPoint.y, 3, 0, Math.PI * 2);
ctx.fill();
ctx.closePath();
};
public animate() {
this.mapCanvasLayer.drawLayer();
window.requestAnimationFrame(this.animate.bind(this));
}
输出
let json = try? JSONSerialization.jsonObject(with: data!, options: [])
print(json ?? "NotWorking")
但是当我尝试将其转换为Dictionary时,其输出为nil。
(
{
babyId = 1;
id = 17;
timestamp = "2018-06-30 09:23:27";
}
)
网页输出
let json = try? JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary
哪里出现错误?
答案 0 :(得分:1)
[ ]
表示JSON中的数组。 { }
表示字典。您有一个字典数组。请注意,在Swift中打印数组时,您会看到( )
。
在没有非常清楚和明确的原因的情况下,不要在Swift中使用NSArray
或NSDictionary
。使用适当类型的Swift数组和字典。
您的代码应为:
do {
if let results = try JSONSerialization.jsonObject(with: data!) as? [[String:Any]] {
// results is now an array of dictionary, access what you need
} else {
print("JSON was not the expected array of dictonary")
}
} catch {
print("Can't process JSON: \(error)")
}
实际上,您也不应该使用data!
。在此之上的某个位置,您应该有一个if let data = data {