json解析 -パース方法-
みなさんこんばんは。
連続投稿になりますが、iOSアプリ開発にてjsonを解析するパース方法を紹介します。
すこし前まではjson解析用の外部ライブラリを利用して解析していたようですが、iOS5からはNSJSONSerializationというクラスが標準で使えるようになったようです。
今回はWebアプリケーションとの連携を想定して、NSURLConnectionで受け取ったリクエストを解析してみたいと思います。
それでは早速。コードは以下の通り
//data型に変換 NSData *json_data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //エラー用の変数を定義 NSError *error=nil; //NSJSONSerializationを使ってパース NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:json_data options:NSJSONReadingAllowFragments error:&error]; //jsonObject.descriptionで出力可能 *descriptionはdata型をstrings型で取得するメソッド NSLog(@"%@", jsonObject.description);
NSLogで確認すればわかりますが、この時点でjsonの中身を取り出すことが出来ています。
ですがjsonの文字化け(的な現象)が起こっていて困ってしまいました(*_*)
解説している方がいましたが、文字化け的なやつが起こる原因が謎のままだったのでとりあえず文字型へ変換することとしました。
追加コードは以下の通り
//NSDictionary型を文字列へ変換する処理 //まずは変換したい要素を指定し再度パース NSData *json_check = [NSJSONSerialization dataWithJSONObject:[jsonObject valueForKeyPath:@"要素の指定"] options:kNilOptions error:nil]; //文字列に変換 NSString *json_str= [[NSString alloc] initWithData:json_check encoding:NSUTF8StringEncoding];
これで無事文字型に変換することができました。
jsonの文字化け的なやつはデコードする必要があると表現されているようですが、よくわかりません。(°_°)
とりあえずこれで使えるはずです!
誰か詳しい仕組みが分かる方が居ましたら教えてください!
何か間違いがありましたらコメントお願いします。