创建一个swifty-json字符串数组

时间:2015-07-03 10:31:04

标签: swift swifty-json

我问了另一个类似于这个的问题,但我会尝试重新措辞,以便清楚地说清楚我正在尝试做什么。我目前有一个JSON文件,如下所示:有一个顶级对象,从该对象有一个对象数组,每个对象包含字符串和整数。我想从这些对象中获取某些字符串值,我可以使用它来显示在UITableView中,我看到的唯一方法是使用这个.append函数,当你只检查数组附加一次时这很好也许每周几次,但我希望每次调用func时数组都会显示最新版本。

到目前为止,我已经尝试了许多不同的方法,以便将每个对象中包含的Name字符串转换为数组,方法是在swift中使用我名为NameList的数组。这样做会导致程序在将每个名称附加到数组中时停止。我的最后一个问题得到了做一个plist的建议,但我认为因为我并不清楚我到底遇到了什么问题。因此,再次总结一下,我只想将所有字符串值转换为可由tableview调用的数组。反正有没有每次附加数组而只是让json的字符串直接进入tableview?我目前的代码是:

func updateArr() {        
    let path = NSBundle.mainBundle().pathForResource("CardList", ofType: "json")
    let jsonData = NSData(contentsOfFile: path!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: nil)
    let json = JSON(data: jsonData!)
    for (key, subJson) in json["array"] {
        if let Name = subJson["Name"].string {
            if let Class = subJson["Class"].number {
                if Class == Int(1) {
            cardNameList.append(Name)
            println(cardNameList)
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

将json对象的值转换为定义的值可以像

一样
me

答案 1 :(得分:0)

很抱歉没有继续回答其他帖子中的评论。 我再次建议使用属性列表文件。

您似乎拥有一系列带有两个键nameClass的词典, 所以plist结构看起来像

<dict>
    <key>array</key>
    <array>
        <dict>
            <key>name</key>
            <string>Alpha</string>
            <key>Class</key>
            <integer>1</integer>
        </dict>
        <dict>
            <key>name</key>
            <string>Beta</string>
            <key>Class</key>
            <integer>2</integer>
        </dict>
    <array>
</dict>

然后您可以使用

轻松过滤和映射数据
if let cardArray = plistDict["array"] {
  let names = cardArray.filter {$0["Class"] == 1} .map {$0["name"]! }
}

plistDict是plist文件的反序列​​化内容