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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Swift

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

API

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

Q&A

1回答

1084閲覧

サーバー(php)で作成したjsonをswiftで受け取るにはどのようなコードを書けばいいですか?

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Swift

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

API

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

0グッド

1クリップ

投稿2019/03/09 01:33

編集2019/03/09 03:28

##実現したいこと
サーバーに置いたphpでjson形式のデータを作成して、それをswiftで受け取りたいのですが、受け取ったjsonを格納した後のprint(json)の段階でnilになってしまい受け取れません。ブラウザからは表示されます。エラーは出ていません。print(req_url)でリクエストURLが作成できているのは確認しています。phpにjsonを返すコードが必要な気がするのですがどうやって書けばいいのかわかりません。

swift4

1import UIKit 2 3class ViewController: UIViewController, UITextFieldDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 textBar.delegate = self 9 textBar.placeholder = "next" 10 } 11 12 override func didReceiveMemoryWarning() { 13 super.didReceiveMemoryWarning() 14 // Dispose of any resources that can be recreated. 15 } 16 17 @IBOutlet weak var textBar: UITextField! 18 19 @IBOutlet weak var nowText: UILabel! 20 21 // データリスト 22 var dataList : [(date:String , time:String)] = [] 23 24 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 25 textField.resignFirstResponder() 26 if let queryKey = textField.text { 27 print(queryKey) 28 nowmesod(keyword: queryKey) 29 } 30 return true 31 } 32 33 struct ItemJson: Codable { 34 let date: String? 35 let time: String? 36 } 37 38 struct ResultJson: Codable { 39 let item:[ItemJson]? 40 } 41 42 // now メソッド 43 func nowmesod (keyword: String) { 44 // URLをエンコードする 45 guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { 46 return 47 } 48 49 // リクエストURLの組み立て 50 guard let req_url = URL(string: "http://localhost/v1.php/now?query=(keyword_encode)") else { 51 return 52 } 53 print(req_url) 54 55 // リクエストに必要な情報を生成 56 let req = URLRequest(url: req_url) 57 // データ転送を管理するためにセッションを生成 58 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 59 // リクエストをタスクとして登録 60 let task = session.dataTask(with: req, completionHandler: { 61 (data , response , error) in 62 // セッション終了 63 session.finishTasksAndInvalidate() 64 65 // do try catch エラーハンドリング 66 do { 67 // JSONDecoder のインスタンス取得 68 let decoder = JSONDecoder() 69 // 受け取ったJSONデータをパース(解析)して格納 70 let json = try decoder.decode(ResultJson.self, from: data!) 71 print(json) 72 // ResultJsonが取得てきているか確認 73 if let items = json.item { 74 self.dataList.removeAll() 75 for item in items { 76 if let date = item.date , let time = item.time { 77 let now = (date,time) 78 self.dataList.append(now) 79 // 表示 80 self.nowText.text = "(now)" 81 82 } 83 } 84 } 85 } catch { 86 print("エラーが出ました") 87 } 88 }) 89 task.resume() 90 } 91}

v1.php

1<?php 2 3 // エラーを表示 4 ini_set('display_errors', 1); 5 6 // now.phpをインポート 7 require_once(dirname(__FILE__)."/service_v1/now.php"); 8 9 if (empty($_SERVER['PATH_INFO'])) { 10 exit; 11 } 12 13 // URL内で呼ばれたAPIを$callに格納(今回はのnow) 14 $parse = explode('/', $_SERVER['PATH_INFO']); 15 $call = ""; 16 foreach ($parse as $value) { 17 if ($value !== "") { 18 $call = $value; 19 break; 20 } 21 } 22 23 // 呼ばれたAPIのクラスが存在するか確認 24 if (file_exists('./service_v1/'.$call.'.php')) { 25 26 // レスポンスのヘッダにjson,UTF-8,クロスオリジン対策を指定 27 header("Content-Type: application/json; charset=UTF-8"); 28 header("X-Content-Type-Options: nosniff"); 29 header("Access-Control-Allow-Origin: *"); 30 header("Access-Control-Allow-Headers: Content-Type"); 31 32 // 呼ばれたAPIごとに処理を分ける 33 switch ($call) { 34 case "now": 35 // クエリの種類を取得 36 $query = $_GET["query"]; 37 if (!(empty($query))) { 38 // レスポンス用の変数を定義 39 $response = ''; 40 // nowクラス(サービス)のインスタンスを作成 41 $nowApi = new Now(); 42 switch ($query) { 43 case "all": 44 $response = $nowApi->getAll(); 45 break; 46 case "date": 47 $response = $nowApi->getDate(); 48 break; 49 case "time": 50 $response = $nowApi->getTime(); 51 break; 52 default: 53 $response = "{\"error\":\"The query is incorrect\"}"; 54 break; 55 } 56 echo $response; 57 }else{ 58 echo "{\"error\":\"The query is not specified\"}"; 59 } 60 break; 61 default: 62 break; 63 } 64 } 65 66?> 67
class Now { // 現在の日時をjsonにして返却する関数 (引数:なし, 戻り値: json(string)) public function getAll() { // データを作成 $jsonData = [ "date" => (string) date("Y/m/d"), "time" => (string) date("H:i:s") ]; // jsonに変換にしてreturn return json_encode($jsonData); } // 現在の日付をjsonにして返却する関数 (引数:なし, 戻り値: json(string)) public function getDate() { $jsonData = [ "date" => (string) date("Y/m/d") ]; return json_encode($jsonData); } // 現在の時間をjsonにして返却する関数 (引数:なし, 戻り値: json(string)) public function getTime() { $jsonData = [ "time" => (string) date("H:i:s") ]; return json_encode($jsonData); } } ?> コード

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

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

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

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

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

guest

回答1

0

それ、jsonになっていますか?

投稿2019/03/09 21:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問