如何使用SwiftyJSON解析字符串数组?

46

使用 SwiftyJSON,我该如何将以下 JSON 数组解析为 Swift [String]

{
    "array": ["one", "two", "three"]
}

我尝试过这段代码,但是它对我没有用:

for (index: String, obj: JSON) in json["array"] {
        println(obj.stringValue)
    }

如何处理这个情况最好?谢谢。

4个回答

97
{
    "myArray": ["one", "two", "three"]
}

使用SwiftyJSON,您可以得到一个包含以下内容的JSON对象数组:

var jsonArr:[JSON] = JSON["myArray"].arrayValue

函数式编程使您可以轻松使用“map”函数将其转换为[String]。SwiftyJson允许您使用下标'.string'将字符串类型强制转换。

var stringArr:[String] = JSON["myArray"].arrayValue.map { $0.stringValue}

map 闭包内的 s 是什么意思? - Isuru
1
啊,抱歉,我现在已经编辑了,应该是'$0',这是map闭包的速记参数。.map()将遍历json数组的每个元素,并每次将值分配给$0。 - Gwendle
2
当接收到包含非字符串值的JSON数组时,此代码将在运行时失败。我建议更改为:JSON ["myArray"] .arrayValue.map {"\($0) "} - skozin
如果数据是 { "myArray": [ ["one", "two", 0.234],["otree", "cat", 12.454] ] },那该怎么办? - μολὼν.λαβέ
4
只需使用.stringValue替换.string,如果为nil或类型错误则返回空字符串。JSON["myArray"].arrayValue.map { $0.stringValue } - Tapani
显示剩余2条评论

9
SwiftyJSON允许您使用$ 0.string提取String?或使用具有默认空字符串值的stringValue的非可选String,如果类型不匹配。
如果您想确保拥有一个没有错误正例的字符串数组,请使用: var stringArray = self.json ["array"] .array?.flatMap({ $ 0.string }) 或在Swift 4.1中 var stringArray = self.json ["array"] .array?.compactMap({ $ 0.string }) 您还可以通过self.json ["array"].arrayValue替换self.json ["array"].array以获得[String] 结果,而不是 [String]?

你可以使用flatMap来过滤等于nil的字符串。 - Pablo Marrufo
1
感谢@PabloMarrufo。我已经使用它改进了回复,并且在Swift 4.1中引入了compactMap。 - jfgrang

5

您拥有一个包含ArrayDictionary,其中包含String。当您访问Dictionary中的值时,它会返回一个简单的String数组。您可以像迭代任何数组一样对其进行迭代。

for obj in json["array"] {
    println(obj.stringValue)
}

4
只需要这样做:
for stringInArray in json["array"]{

    let value = stringInArray.1.stringValue
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接