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

问题描述:

使用SwiftyJSON我该如何解析下面的JSON数组到Swift [String]如何用SwiftyJSON解析字符串数组?

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

我曾尝试这个代码,但它不为我工作:

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

什么是处理的最佳方式?谢谢。

您有Dictionary其中包含Array其中包含String s。当您访问Dictionary中的值时,它会返回String的简单Array s。你像任何数组一样迭代它。

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

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

使用SwiftyJSON,你可以得到JSON的数组对象:

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

函数式编程则很容易让你转换到[字符串]使用“地图”功能。 SwiftyJson让你投的字符串类型与标“.string”

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

这是什么** s **在'map'关闭中? – Isuru 2015-02-26 09:26:53

+1

啊对不起,我现在编辑过,它应该是'$ 0',这是地图关闭的简写参数。 .map()将迭代json数组的每个元素,并且每次将值赋给$ 0。 – Gwendle 2015-02-26 09:57:59

+0

谢谢。我遇到了一些与SwiftyJSON和数组类似的问题。我试图转换它,就像在你的答案,但它崩溃的错误**意外地发现零,同时解开一个可选值**。我发布了一个单独的问题[这里](http://stackoverflow.com/q/28739509/1077789)。如果可以的话,你可以看看吗?谢谢。 – Isuru 2015-02-26 10:12:45

只要做到这一点:

for stringInArray in json["array"]{ 

    let value = stringInArray.1.stringValue 
} 

你需要做的是第一滤波器所有非字符串和再投到带地图的字符串。

var stringArray = self.json["array"].array?.filter({ $0.string != nil }).map({ $0.string! })

如果不先过滤,如果你有什么比一个字符串,它是不是你想要的,特别是当数据来自其他来源否则您的应用程序会崩溃。