このようなJSONを返すAPIを使用しています
{
"boards":[
{
"attribute":"value1"
},
{
"attribute":"value2"
},
{
"attribute":"value3",
},
{
"attribute":"value4",
},
{
"attribute":"value5",
},
{
"attribute":"value6",
}
]
}
In Swift私は2つの関数を使用してJSONを取得し、解析します
func getJSON(urlToRequest: String) -> NSData{
return NSData(contentsOfURL: NSURL(string: urlToRequest))
}
func parseJSON(inputData: NSData) -> NSDictionary{
var error: NSError?
var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
return boardsDictionary
}
そして、私はそれを使用して呼び出します
var parsedJSON = parseJSON(getJSON("link-to-API"))
JSONは正常に解析されます。印刷するとき
println(parsedJSON["boards"])
配列のすべてのコンテンツを取得します。ただし、個々のインデックスにアクセスできません。私は肯定的だIS配列。
parsedJSON["boards"].count
正しい長さが返されます。ただし、を使用して個々のインデックスにアクセスしようとすると
parsedJSON["boards"][0]
XCodeは構文の強調表示をオフにし、これを提供します。
コードはコンパイルされません。
これはXCode 6のバグですか、何か間違っていますか?
Swiftの辞書アクセスはOptionalを返すため、値を強制する必要があります(またはif let
構文)を使用します。
これは動作します:parsedJSON["boards"]![0]
(ただし、Xcodeをクラッシュさせることはおそらくないはずです)
こちらをご覧ください: https://github.com/lingoer/SwiftyJSON
let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
//Now you got your value
}
変数を作成できます
var myBoard: NSArray = parsedJSON["boards"] as! NSArray
そして、あなたは「ボード」にあるようなものにアクセスできます
println(myBoard[0])
これに対処する正しい方法は、辞書キーからの戻りをチェックすることです。
if let element = parsedJSON["boards"] {
println(element[0])
}