1

API を使用するアプリケーションを作成しています。例として、Twitter API とだけ言っておきましょう。これは、ほとんどの人がよく知っている API であり、どの API が使用され、どこで JSON が生成されるかは問題ではありません。から来ています。

したがって、保護されていない API を使用して、次のコードを実行できます。

let urlPath = "http://mySimpleApi.com/results.js"
let url: NSURL = NSURL(string: urlPath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in

    if error != nil {
        // If there is an error in the web request, print it to the console
        println(error.localizedDescription)
    }

    var err: NSError?
    var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
    if err != nil {
        // If there is an error parsing JSON, print it to the console
        println("JSON Error \(err!.localizedDescription)")
    }

    let json = JSON(jsonResult)




    let userName:JSON = json["user"]["name"]
    let userNameString = userName.string!
    println(userNameString)



})
task.resume()

結果は JSON 形式で返され、上記のプログラム コードは結果のユーザー名を正常に出力します。何を見ているのかがわかるように、JSON の形式をすぐに示しておく必要があるかもしれません。

{
  "user" : 
  {
    "name": "Bob",
    "login": "bob2006",
    "password": "bobsEncryptedPassword",
  }  
}

したがって、次のコードを実行すると、コンソールに「Bob」という名前が返されました。まさに私が期待していたこと。

明らかに、これは非常に単純であり、JSON と、それを自分のアプリで機能させる方法を調べて実験するためにこれを行っていました。

ここでの問題は、Twitter のような oAuth API を使用したい場合です。認証されていないリクエストを送信すると、次のようになります。

{"errors":[{"code":215,"message":"Bad Authentication data."}]}

ここで、元のコードを変更して、このエラーが発生したリンクを配置したときに、let userName:JSON = json["errors"][0]その領域で最初のアイテムを選択するように指定できたことが予想されましたerrors。角かっこを使用して開いたため、これは配列であると想定しています。これがうまくいかなかったとき、let userName:JSON = json["errors"][0][message]代わりに試してみましたが、これはうまくいきませんでした。同じエラーが発生しました。エラーはコードを強調表示し、次のように述べています。

Thread 3: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,subcode=0x0)

次に、コンソールでこれが返されます:

fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)

私がこれがうまくいかないことを気にかけているのは、なぜうまくいかないのかを理解するためです.これを実際の状況でプレイしているときはわかります-明らかに、Twitter APIからエラーメッセージを取得することは、おそらくそれほど大きな実用的ではありません.応用。

最後に、ブラウザで認証されたリクエストを送信すると、ファイルがダウンロードされ、私が使用している他の JSON ファイルのようにブラウザに表示されないことを言いたかっただけです。これは、アプリケーションに適用するときに違いがありますか、それともまったく同じように機能し、他の JSON 形式と同じように操作する必要がありますか?

これが長い質問であることは承知していますが、関連するすべての情報を含めたと思います。

しばらくお待ちください-私はただ学んでいます、ありがとう。

4

1 に答える 1