質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

3662閲覧

swift api json 空データについて [ 至急 ]

yuxa

総合スコア12

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2016/04/21 12:43

現在swiftでぐるなびAPIからjsonデータを取得し表示する
アプリを製作しているのですが取得後データが入っていない時の
処理がうまくいきません、よかったらお力添えください。

下の方のif文でpic内のshop_image1が無い場合は
NotFoundを表示したいのですが何故かデータがなくても
elseの方へ進んでしまいます。
おそらくif文の条件がいけないと思うのですがどうすればいいでしょうか。

データが入っていない場合は実行中の辞書の項目は
(_NSDictionaryM *) 0 Key/Value pairs
となっています。

swift

1URLns = NSURL(string:URLstr) 2AccessURL = NSURLRequest(URL:URLns) 3let jsonData :NSData = NSData(contentsOfURL: URLns)! 4 5 do { 6 json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) as! NSDictionary 7 print("\(URLstr)") 8 } catch { 9 // エラー処理 10 } 11 12 let rest:NSArray = json.objectForKey("rest") as! NSArray //restdata整理 13 var access:NSDictionary! 14 var pic:NSDictionary! = nil 15 16 17 18 for var i=0 ; i < rest.count ; i++ { 19 print(rest[i].objectForKey("name") as! NSString) 20 access = rest[i].objectForKey("access") as! NSDictionary 21 print("\(access.objectForKey("station") as! NSString)から約\(access.objectForKey("walk") as! NSString)分") 22 pic = rest[i].objectForKey("image_url") as! NSDictionary 23 if pic["shop_image1"]?.isKindOfClass(NSNull) == true { 24 print("NotFound") 25 }else{ 26 //print("\(pic.objectForKey("shop_image1") as! NSString)") 27 } 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

kenterouさんの案で

swift

1var picdata = pic["shop_image1"] 2 if picdata?.description != "{\n}" { 3 print(picdata) 4 }else{ 5 print("NotFound") 6 }

のように条件を変えたら出来ましたありがとうございます。

投稿2016/04/21 14:01

yuxa

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

swift

1if pic["shop_image1"] == nil {

でどうでしょうか?

#【追記】空文字列の判定

空文字列のチェックなら、

swift

1var picdata = pic["shop_image1"] as? NSString 2if picdata?.length > 0 { 3 print(picdata) 4}else{ 5 print("NotFound") 6}

これでどうでしょうか?
(他のところに合わせてNSStringを使ってます)

投稿2016/04/21 13:09

編集2016/04/21 16:27
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/04/21 13:10

遅かった上に低品質でしたw
yuxa

2016/04/21 13:44

実装してみたところうまくいきました。 しかしこれだとなぜ低品質なのでしょうか?
yuxa

2016/04/21 13:54

すみません勘違いでした。 どうやらnilではデータがある場合もelseに進んでしまいました。
fuzzball

2016/04/21 22:38 編集

私とKenterouさんの回答は、やっていることは同じです。なので結果も変わりません。 Kenterouさんの回答が優れているのは、データがあったときに処理をしやすいことです。 なぜ処理をしやすいかというとOptional Bindingを使っているからです。 なぜOptional Bindingを使っていると処理をしやすいかというと‥続きはWEBでw 「Optional Binding」[検索]Click!
fuzzball

2016/04/21 16:28

空文字列判定の方法を追記しました。
guest

0

ベストアンサー

Optional Bindingを使って、判定を以下の様にするといかがでしょうか?
条件も追加しました。

swift

1if let picdata = pic["shop_image1"] as? NSString where picdata != "{\n}" { 2 print(picdata) 3} else { 4 print("NotFound") 5}

投稿2016/04/21 13:07

編集2016/04/21 14:10
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuxa

2016/04/21 13:44

実装してみたところ空データの場合{}と表示されてしまったのでfuzzballさんの案を使わせていただきました。 原因がわかるのであれば教えていただけませんか?
yuxa

2016/04/21 13:54

すみません勘違いでした。 どうやらnilではデータがある場合もelseに進んでしまいました。
_Kentarou

2016/04/21 14:11

そのデータに合うように回答を変更しました。 お試しください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問