从JSON字符串中的2D数组中检索值

时间:2016-01-16 17:28:51

标签: json swift swift2 nsarray

我们使用像这样的REST协议获取一些JSON数据。

jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)

看起来像这样:

jsonResult: (
    {
    board = "[[\"1:\",\"Y\",\"U\",\"P\"]]";
})

从这里我们得到一个像这样的游戏板:

     if let boardContentArray = jsonResult[0]["board"] as NSArray?{
        print("boardContentArray: \(boardContentArray)" )
    } else {
        print("board element is not an NSArray")
    }

boardContentArray看起来像这样:我本来应该是一个只有一行和四列的二维数组,但它应该适用于任何给定的大小。

[["1:","Y","U","P"]]

如何检索boardFromRemote的各个值。我想在二维数组中将元素设置为0,0就像这样:

boardContentArray[0][0]

然后应该返回“1:”,但事实并非如此。这种确切的语法不正确,无法编译。从boardContentArray变量中检索元素的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

jsonResult[0]["board"]的内容是 JSON字符串,可以使用NSJSONSerialization解码为数组。您必须先将String转换为NSData,然后像这样解码它,例如:

do {
    let boardContentArray = "[[\"1:\",\"Y\",\"U\",\"P\"]]" // the String from jsonResult[0]["board"]
    if let boardData = boardContentArray.dataUsingEncoding(NSUTF8StringEncoding),
        let boardArray = try NSJSONSerialization.JSONObjectWithData(boardData, options: []) as? [[String]] {
            print(boardArray[0]) // ["1:", "Y", "U", "P"]
    }
} catch let error as NSError {
    print(error)
}