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

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

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

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

Q&A

解決済

1回答

1173閲覧

swift2.0 jsonのパースについて

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2017/05/14 02:55

編集2017/05/14 05:14

現在、swif2.0を使用してphpから受け取ったjsonデータをパースする
プログラムを書いております。

以下が該当プログラムの全体になりますが、シミュレーターで表示を
試みても表示がされていない状況でございます。

import UIKit class TopicView: UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate{ @IBOutlet weak var myTextView: UITextView! override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.lightGrayColor() self.view.addSubview(myTextView) // 通信用のConfigを生成. let myConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() // Sessionを生成. let mySession:NSURLSession = NSURLSession(configuration: myConfig, delegate: self, delegateQueue: nil) // 通信先のURLを生成. let myUrl:NSURL = NSURL(string: "http://localhost/book/jsonDB.php")! // タスクの生成. let myTask:NSURLSessionDataTask = mySession.dataTaskWithURL(myUrl, completionHandler: { (data, response, err) -> Void in do{ // 受け取ったjsonデータを表示. dispatch_async(dispatch_get_main_queue(), { self.myTextView.text = NSString(data: data!, encoding: NSUTF8StringEncoding)! as String }) // 受け取ったJSONデータをパースする. let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary // バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる. dispatch_async(dispatch_get_main_queue(), { // パースしたJSONデータへのアクセス. for value in json { self.myTextView.text = "\(self.myTextView.text)\n\(value.key) : \(value.value)" } }) }catch{} }) // タスクの実行. myTask.resume() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

以下の直前までは実行出来ているようなので、このパートのどこかに問題が
あるのだと思うのですが、エラーも表示されておらず、何が間違っているのか判りかねている状況でございます。

// バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる. dispatch_async(dispatch_get_main_queue(), { // パースしたJSONデータへのアクセス. for value in json { self.myTextView.text = "\(self.myTextView.text)\n\(value.key) : \(value.value)" } })

ご参考として、php側のコードも以下に記載いたします。

<?php require("db.php"); $sql = "SELECT * FROM AA"; $result = $mysqli -> query($sql); header('Content-type: application/json'); while($data = $result -> fetch_array()) { //jsonデータ化する $senddata = array( 'name'=>$data['name'], 'age'=>21 ); $json = json_encode($senddata,JSON_UNESCAPED_UNICODE); var_dump($json); } } ?>

以上になります。
お力添えを頂けますと幸いです、よろしくお願いいたします。

<追記>
デバックコンソールには以下のようなメッセージが表示されておりました
JSON text did not start with array or object and option to allow fragments not set.}

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

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

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

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

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

guest

回答1

0

ベストアンサー

JSON text did not start with array or object and option to allow fragments not set.}

にあるように、JSONは

json

1{ 2 "var": "value" 3}

のようなオブジェクトか配列である必要がありますが、

http://php.net/manual/ja/function.var-dump.php

php

1var_dump($json); 2``` 3 4これは json 形式でアウトプットするものではありません。まずはこのサーバー側を修正しましょう。

投稿2017/05/14 06:11

TakeoAsai

総合スコア880

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

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

退会済みユーザー

退会済みユーザー

2017/05/14 07:59

アドバイス頂きありがとうございます! ご教示いただいた点と、require(db.php)でノイジーな情報を読み込んでしまっていたところを 修正したら治りました! お力添えを頂きありがとうございました! 引き続きよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問