web-dev-qa-db-ja.com

Swiftで解析されたJSON内の配列を解析するにはどうすればよいですか?

このような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 Error

コードはコンパイルされません。

これはXCode 6のバグですか、何か間違っていますか?

28
Paul Vorobyev

Swiftの辞書アクセスはOptionalを返すため、値を強制する必要があります(またはif let構文)を使用します。

これは動作します:parsedJSON["boards"]![0]

(ただし、Xcodeをクラッシュさせることはおそらくないはずです)

20
micahbf

こちらをご覧ください: https://github.com/lingoer/SwiftyJSON

let json = JSONValue(dataFromNetworking)
if let userName = json[0]["user"]["name"].string{
    //Now you got your value
}
9
user3764120

変数を作成できます

var myBoard: NSArray = parsedJSON["boards"] as! NSArray

そして、あなたは「ボード」にあるようなものにアクセスできます

println(myBoard[0])
6
Niloy Mahmud

これに対処する正しい方法は、辞書キーからの戻りをチェックすることです。

    if let element = parsedJSON["boards"] {
        println(element[0])
    }
4
voidref