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

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

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

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

Swift

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1337閲覧

swiftとpython間でのjsonファイルの送受信の仕方

pepper0

総合スコア20

JSON

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

Swift

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/13 08:55

タイトルの通りswiftとpython間でのjsonファイルのやりとりの仕方が分かりません。
具体的には、jsonファイル内のキーを活用して画像やテキストのやり取りを行いたいです。
しかし、jsonファイルの送受信の仕方が分からない状況です。
調べてみた結果、サーバを作成するのが一番らしいとだけわかりました。
そっち方面の知識には疎いため、何かよいやり方やサイトなどがあったら教えていただきたいです。

jsonファイルはこのようになっております。

json

1{ 2 "sam1" : ["どんな症状ですか?"], 3 "sam2" : ["エラーが出ています","プログラムが動きます","実行できません"] 4 5 "sam3" : "/home7/h30/a.kage/Desktop/ss1.png" 6 7}

swiftはこのようになっております

swift

1import UIKit 2//jsonの使用 3import Foundation 4//話させる 5import AVFoundation 6 7class ViewController: UIViewController , UIScrollViewDelegate{ 8 9 var num:Int = 170 10 var wid:CGFloat = 0 11 var i:Int = 0 12 var talker = AVSpeechSynthesizer() 13 14 struct Sample: Codable { 15 16 let sam1: [String] 17 let sam2: [String] 18 19 let sam3: [String] 20 } 21 22 23 //オブジェクトのデータをjson文字列として返している 24 func getJSONData() throws -> Data? { 25 guard let path = Bundle.main.path(forResource: "sample", ofType: "json") else { return nil } 26 27 let url = URL(fileURLWithPath: path) 28 29 return try Data(contentsOf: url) 30 31 } 32 33 34 override func viewDidLoad() { 35 super.viewDidLoad() 36 37 //画面のスクロール 38 let scrollView = UIScrollView() 39 scrollView.backgroundColor = UIColor.white 40 scrollView.frame.size = CGSize(width: view.frame.width, height: view.frame.height) 41 scrollView.center = self.view.center 42 scrollView.contentSize = CGSize(width: view.frame.width, height: 1000) 43 scrollView.bounces = false 44 scrollView.indicatorStyle = .default 45 scrollView.scrollIndicatorInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 46 scrollView.delegate = self 47 48 self.view.addSubview(scrollView) 49 50 51 //画面上部のラベル 52 guard let data1 = try? getJSONData() else { return } 53 54 guard let sam1 = try? JSONDecoder().decode(Sample.self, from: data1!) else { return } 55 56 sam1.sam1.forEach({(sample) in 57 let label = UILabel() 58 label.textAlignment = NSTextAlignment.center 59 label.text = "(sample)" 60 label.frame = CGRect(x: 150, y: 150, width: 300, height: 30) 61 label.layer.position = CGPoint(x: self.view.frame.width/2, y:100) 62 label.textColor = UIColor.black 63 label.backgroundColor = UIColor(red: 0.3, green: 0.4, blue: 0.7, alpha: 0.1) 64 scrollView.addSubview(label) 65 66 //話させる 67 let utterance = AVSpeechUtterance(string:sample) 68 utterance.voice = AVSpeechSynthesisVoice(language: "ja-JP") 69 self.talker.speak(utterance) 70 71 }) 72 73 74 guard let data2 = try? getJSONData() else { return } 75 76 guard let sam2 = try? JSONDecoder().decode(Sample.self, from: data2!) else { return } 77 78 79 //jsonデータ出力、ボタンの生成 80 81 //print("(animals.park) park") 82 83 sam2.sam2.forEach({(sample) in 84 85 let button = UIButton() 86 button.frame = CGRect(x: 25+(i*60)+(i*10), y: 370, width: 300, height: 60) 87 button.layer.position = CGPoint(x:self.view.frame.width/2,y:170 + wid) 88 button.setTitleColor(UIColor.black, for: UIControlState.normal) 89 button.backgroundColor = UIColor(red: 0.3, green: 0.7, blue: 0.6, alpha: 0.1) 90 button.layer.borderColor = UIColor(red: 0.3, green: 0.6, blue: 0.5, alpha: 1).cgColor 91 button.layer.cornerRadius = 15 92 button.layer.shadowOffset = CGSize(width: 2,height: 2) 93 94 button.setTitle("(sample)",for: UIControlState.normal) 95 button.setTitle("押されました",for: UIControlState.highlighted) 96 button.setTitleColor(UIColor.red, for: UIControlState.highlighted) 97 98 //ボタンで実行するメソッド 99 button.addTarget(self, action: #selector(ViewController.buttonEvent), for: UIControlEvents.touchUpInside) 100 101 scrollView.addSubview(button) 102 103 wid = wid + 70 104 105 i=i+1 106 107 //print("animal:(animal)") 108 }) 109 110 111 /* 112 animals.nickname.forEach({(animal, nickname) in 113 print("(nickname) は (animals.park) 公園にいる (animal) のニックネームです") 114 }) 115 */ 116 /* 117 //テキストフィールドの生成 118 var textField :UITextField! 119 textField = UITextField() 120 textField.frame = CGRect(x: self.view.frame.width/5 , y: 170 + wid, width: 250 , height: 60) 121 textField.placeholder = "その他" 122 textField.borderStyle = UITextBorderStyle.roundedRect textField.textAlignment = NSTextAlignment.left 123 textField.keyboardType = UIKeyboardType.default 124 textField.returnKeyType = UIReturnKeyType.go 125 textField.clearButtonMode = UITextFieldViewMode.never 126 scrollView.addSubview(textField) 127 */ 128 guard let data3 = try? getJSONData() else { return } 129 130 guard let sam3 = try? JSONDecoder().decode(Sample.self, from: data3!) else { return } 131 132 133 } 134 135 136 //ボタンアクション 137 @objc func buttonEvent(_ sender:UIButton){ 138 print("ボタンの情報:(sender)") 139 } 140 141 override func didReceiveMemoryWarning() { 142 super.didReceiveMemoryWarning() 143 } 144 /* 145 //キーボードを下げる 146 func textFieldShouldRetuen(_ textField: UITextField) -> Bool { 147 textField.resignFirstResponder() 148 return true 149 */ 150}

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

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

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

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

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

MasakiHori

2018/11/13 09:19

例示のJSONはシンタックスが誤っていますが、この通りのものを送信しているのでしょうか?
guest

回答1

0

ベストアンサー

以前類似の回答をしたので貼っておきます
https://teratail.com/questions/154226

投稿2018/11/14 02:30

kosanai

総合スコア471

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問