无法将数据转换为NSDictionary

时间:2018-07-03 13:45:21

标签: json swift nsjsonserialization

我正在尝试将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

哪里出现错误?

1 个答案:

答案 0 :(得分:1)

[ ]表示JSON中的数组。 { }表示字典。您有一个字典数组。请注意,在Swift中打印数组时,您会看到( )

在没有非常清楚和明确的原因的情况下,不要在Swift中使用NSArrayNSDictionary。使用适当类型的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 {