Swift:用JSON解析数组

时间:2016-04-14 23:19:33

标签: arrays json swift

[{"name":"Air Elemental","toughness":"4","printings":["LEA","BTD","7ED","8ED","9ED","10E","DD2","M10","DPA","ME4","DD3_JVC"]}]

我有一个JSON,每个列表中都有一个名为" prints"如下所示,我如何从每个列表中取出这个数组并将其转换为类似" LEA-BTD-7ED"的字符串。这是我到目前为止的事情,但它崩溃了。

let err : NSErrorPointer?
    let dataPath = NSBundle.mainBundle().pathForResource("cardata", ofType: "json")
    let data : NSData = try! NSData(contentsOfFile: dataPath! as String, options: NSDataReadingOptions.DataReadingMapped)
    do{
        var contents = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as! [AnyObject]

        for var i = 0;i<contents.count;++i{

                let printing = contents[i]["printings"] as! String
                 }
        } 

2 个答案:

答案 0 :(得分:1)

以下是代码:

let path = dataPath!
if let JSONData = NSData(contentsOfFile: path)
{
    do
    {
        if let dictionariesArray = try NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions()) as?
            [[String: AnyObject]]
        {
            for dictionary in dictionariesArray
            {
                if let printingsArray = dictionary["printings"] as? [String]
                {
                    let printingsString = printingsArray.joinWithSeparator("-")
                    print(printingsString)
                }
            }
        }

    }
    catch
    {
        print("Could not parse file at \(path)")
    }
}

执行它打印“LEA-BTD-7ED-8ED-9ED-10E-DD2-M10-DPA-ME4-DD3_JVC”

答案 1 :(得分:0)

您无法将Arraycontents[i]["printings"])投射到String。您想要的是Array joinWithSeparator()方法,如下所示:

let printing = contents[i]["printing"] as! Array
let printingStr = printing.joinWithSeparator("-")

(实际上,我不确定你是否需要as! Array;没有它就试试吧。)